在弄乱一些代码后,我意识到我需要编译器标志 -Wshadow
,因此我决定也在 Codeblocks
中使用它,但它不起作用,并且我不明白为什么。
以下代码:
#include <stdio.h>
int main(void){
int i = 0;
int arr[] = {1,2,3};
for (int i=0 ; i < 3 ; i++){
printf("%d ",arr[i]);
}
printf("\nI = %d\n",i);
}
如果我尝试使用以下标志
在我的终端
中编译它:
-Wall -Wextra -Werror -Wstrict-prototypes -Wconversion -Wmissing-prototypes -Wold-style-definition -Wshadow -O0 -g
我得到以下输出,这是正常的:
program.c: In function ‘main’:
program.c:7:14: error: declaration of ‘i’ shadows a previous local [-Werror=shadow]
for (int i=0 ; i < 3 ; i++){
^
program.c:4:9: note: shadowed declaration is here
int i = 0;
^
cc1: all warnings being treated as errors
现在使用相同的编译器Flags
似乎不起作用,编译正常,没有警告,就像标志-Wshadow
不存在一样。
有人知道如何解决这个问题吗?
GCC 版本是:
gcc (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204
最佳答案
当您通过 IDE 添加编译器标志时,它不会自动将任何现有对象文件或可执行文件标记为已过时。
您需要单击“重建”以使用新标志完全重建代码。
关于编译器标志 "-Wshadow"在代码块中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467078/