【发布时间】:2015-07-16 19:25:39
【问题描述】:
在一个文件 struct_test.c 我写:
static struct x x;
我使用 GCC(4.8.2,Ubuntu)进行编译
gcc -c -O0 struct_test.c
我得到了可以理解的错误:
error: storage size of 'x' isn't known
然后我重新编译,这次开启了优化
gcc -c -O struct_test.c
并且文件编译没有错误。
我可以理解为什么打开优化会消除错误,但有人可以帮助我获得指示 gcc 忽略未定义标记“x”的实际编译器选项吗?
【问题讨论】:
-
发布MCVE 应该是微不足道的(强调完整)。这样做。
-
你在任何地方都使用
x吗?优化器是否可以删除未使用的声明,因此它不会抱怨它不知道大小? -
@TripeHound 当然,我没有在任何地方使用“x”。我想了解的是哪些编译器选项指示优化器忽略未使用的声明。
-
您要查找的选项是
-fdce(死代码消除),它是-O的一部分。 -
@fsheikh 真奇怪。您说您收到未使用的 var 警告,但没有关于暂定声明警告/错误? gcc 必须表现出额外的迂腐水平。 gcc 肯定有可能没有这样的警告/错误,并且不会在链接时为错误而烦恼,因为无论如何 var 都会被 opti 绊倒(您现在可能看到的内容)。上升。
标签: c gcc struct compiler-optimization