好吧,所以这是一个我已经错误的精简版变体。这个错误是我用一个未初始化的变量初始化一个数组。早些时候,我用一个函数来声明使用函数的元素数量,但是在清理之后,我忘记了它,并将所有声明移到了函数的顶部。为什么gcc在这段代码中未初始化数组的大小时会发出警告?
我使用了标志-std=c99 -Wall -Wextra -pedantic -O
,并且通常gcc会在未初始化之前对使用的值发出警告,但在此特定情况下,它并不会。所以,我的问题是:
是这gcc
或一个错误是有可能f(&n)
在一些奇怪的方式后,初始化数组的大小?
#include <stdio.h>
void f(int * x) {
*x = 8;
}
int main(void) {
int n;
float a[n]; // Compiler should warn that n may contain garbage
a[7] = 3.1415;
printf("%f\n", a[7]);
f(&n); // Removing this causes the compiler warn as expected
return 0;
}
编辑:这可能是this gcc bug?
看起来像我的一个bug – user3629249