【发布时间】:2021-05-14 13:33:46
【问题描述】:
所以我在搞乱 C 代码,我注意到 gcc 和 clang 处理代码的方式。
如果我使用可变大小在文件范围内声明一个数组,clang 编译没有问题,但 gcc 会抛出错误。我的猜测是,它与 gcc/clang 中默认启用/未启用哪些编译器标志有关,但如果有人能准确地告诉我为什么会发生这种情况并可能建议一些我可以学习的在线资源,我会很高兴有关此功能的更多信息。
这里是抛出错误的代码的任意示例 -
typedef struct node{
int data;
struct node *next;
struct node *prev;
}node;
const int N = 1000;
node *table[N]; // This is where the error is
int main() {
return 0;
在没有其他标志的情况下运行 clang example.c 可以正常编译运行在没有其他标志的情况下运行 gcc example.c 会引发错误 -
example.c:9:7: error: variably modified 'table' at file scope
9 | node *table[N];
| ^~~~
【问题讨论】:
-
根据 C 标准,可变长度数组可能没有静态存储持续时间。然而,编译器可能有自己的语言扩展。如果程序编译为 C++ 程序,也没有可变长度数组。
标签: c gcc compiler-errors clang