编译器标志 "-Wshadow"在代码块中不起作用

标签 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);
}

如果我尝试使用以下标志在我的终端中编译它:

-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/

相关文章:

c - 如何使用 malloc 捕获程序员错误?

C 通用宏名称 - gcc -fextended-identifiers

c++ - 如何使用 system() 函数在 C++ 中存储 cmd 内存 [C++]

c - MAC OS X : zsh: no such file or directory once running a program from Codeblocks

OS X 版本之间的 C 问题导致未定义的行为

c - 枚举类型值未正确比较

c - 如何在 C 中复制字符串并返回其地址,将其分配给指针并打印新字符串?

c - (在哪里)clang 是否记录了实现定义的行为?

c++ - template-id 不匹配任何模板声明 GNU gcc 编译器

c++ - 如何使用 GUI 将外部库和项目导入我的 C++ 项目?