gpt4 book ai didi

c - 阴影声明不会产生任何警告

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:50 24 4
gpt4 key购买 nike

gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0

我在我的系统上安装了一个库开发包,其中包含用于编译我的二进制文件的 header 。其中一个头文件的外部声明如下所示

test.h:

#ifndef AAA
#define AAA

typedef struct test test;

#endif

我的二进制文件是

main.c

#include <lib/test.h>

int main(void){
test *test = NULL; //no warning produced
(void) test;
}

使用-Wshadow 编译时不会产生警告。但是,如果我包含一个声明与

相同的手写文件

mytest.h:

#ifndef AAA
#define AAA

typedef struct test test;

#endif

main.c

#include "mytest.h"

int main(void){
//warning: declaration of ‘test’ shadows a global declaration [-Wshadow]
test *test = NULL;
(void) test;
}

这是预期的行为吗?我在想在这两种情况下都会打印警告

最佳答案

除非您通过 -Wsystem-headers,否则系统位置的 header 会禁用警告。

使用 -Wsystem-headers -Wshadow,即使文件位于 /usr/include 中,您也应该收到该警告。

该选项记录在 https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#Warning-Options 中:

-Wsystem-headers

Print warning messages for constructs found in system header files. Warnings from system headers are normally suppressed, on the assumption that they usually do not indicate real problems and would only make the compiler output harder to read. Using this command-line option tells GCC to emit warnings from system headers as if they occurred in user code. However, note that using -Wall in conjunction with this option does not warn about unknown pragmas in system headers—for that, -Wunknown-pragmas must also be used.

根据经验,-Wsystem-headers 会导致警告重新出现,但该行为可被视为 gcc 错误,因为遮蔽发生在用户代码中,而不是遮蔽全局的系统 header 。

关于c - 阴影声明不会产生任何警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56259219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com