为什么在定义初始化到未命名数组的函数作用域的static
指针时,GCC和Clang分别显示"错误:初始化程序元素不是常量"和"错误:初始化程序元素不是编译时常量";但是,当在文件范围内定义指向相同的未命名数组的相同静态指针时,他们处理得很好.
我已经使用针对嵌入式硬件的编译器编译了相同的程序,编译没有错误.
以下是错误处于活动状态的代码片段:
int foo()
{
static int *ptr = (int[]) { 9, 8, 7 }; /* COMPILE ERROR */
return ptr[2];
}
int main(void)
{
return foo();
}
这里有一个类似的代码片段,在文件范围内带有static
指针,GCC和Clang编译时没有出现问题:
static int *ptr = (int[]) { 9, 8, 7 }; /* File-scope is fine */
int foo()
{
return ptr[2];
}
int main(void)
{
return foo();
}
当然,我可以在我的函数中定义一个单独的静态数组,并将我的静态指针指向该数组,但我想使用一个未命名的array.我try 了不同的编译器标志,但都无济于事:
-
-std=c90
个 -
-std=c99
个 -
-std=c11
个 -
-std=gnu11
个