在C中,初始化一个变量到它自己的值是否合理?如果是的话,为了什么?初始化一个变量到它自己的未定义值
请允许我详细说明。在Git源文件中,有一些将变量初始化为自己的未定义值的示例,如transport.c或wt-status.c中所示。我从这些声明中删除了任务并运行测试。看到没有回归,我认为这些任务是多余的。
另一方面,我用GCC 4.6和Clang 2.9做了一些简单的测试。
#include <stdio.h>
int main() {
printf("print to increase probability of registers being non-zero\n");
int status = status;
return printf("%i\n", status);
}
与-Wall -std=c99
和各种-O
水平打印编译没有警告,并表明status == 0
。具有非零优化级别的Clang虽然会打印一些垃圾值。这让我推断这些表达式的结果是不确定的。
我可以想象,这样的赋值可以抑制未初始化的变量警告,但从Git获取的示例并非如此。删除作业不会引入任何警告。
这样的任务是一个未定义的行为?如果不是,你用它们做什么?
我建议在Git邮件列表上进行更改。 Here's what I've learned。
也许git中的例子不会为* your *系统禁止未初始化的变量警告,而是在其他开发人员经常使用的系统上禁止该警告。使用GCC,未初始化的变量警告受优化标志影响,并且Clang生成一组完全不同的警告,即使它是GCC的“插入式替代品”。 –
我会初始化这些变量为0(或-1),而不是完全放弃初始化。有人为了某个目的添加了代码;即使我发现使用奇怪的机制,我也可以尊重目的。 –
@JonathanLeffler,不仅奇怪,在陷阱表示的平台上会产生未定义的行为。 –