3

我想我在 VS2010 (C / C++) 中发现了一个错误,但它看起来如此明显,我不敢相信。
(在Select is not Broken的脉络中)。

如果这是一个错误,或者我遗漏了什么,请告诉我:

int main(void)
{
    int x;  // Declare a variable x;

    for(int i=0, x = 10; i<5; ++i) // Initialize X to 10.  No way around this.
    {
        printf("i is %d\n", i);
    }

    if (x == 10) // warning C4700: uninitialized local variable 'x' used    
    {
        printf("x is ten\n");
    }
}
4

2 回答 2

25
int i=0, x = 10;

您刚刚声明了第二个作用域为循环的x变量。for

外部x变量不受影响。

于 2013-08-19T19:50:45.970 回答
0

要对此进行测试,您应该尝试在不同的编译器中编译代码。使用 gcc(不带-Wall -Wextra -Wpedantic标志):

$ gcc a.c
a.c: In function ‘main’:
a.c:7: error: redeclaration of ‘x’ with no linkage
a.c:5: error: previous declaration of ‘x’ was here
a.c:7: error: ‘for’ loop initial declaration used outside C99 mode
a.c:9: warning: too few arguments for format
a.c:9: warning: too few arguments for format

如前所述,问题是您在 for 循环中声明了一个范围更窄的不同变量。

于 2013-08-19T20:05:34.833 回答