编译器标志“-Wshadow”在CodeBloks

时间:2016-02-17 20:29:51

标签: c gcc codeblocks gcc-warning

我意识到在搞砸了一些代码之后我需要编译器标志-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);
}

如果我尝试使用以下Terminal在我的flags中编译它:

-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

1 个答案:

答案 0 :(得分:1)

通过IDE添加编译器标志时,它不会自动将任何现有目标文件或可执行文件标记为过时。

您需要点击“Rebuild”以使用新标记完全重建代码。