可以在clang中禁用此警告吗?警告:#pragma在主文件中一次

kyl*_*awl 17 pragma clang suppress-warnings

警告:#pragma在主文件中一次

我们通过clang运行我们的标题以获得部分AST.

是否可以禁用该警告?

W1M*_*M0R 9

使用-Wno-pragma-once-outside-header命令行参数.


fnc*_*c12 7

当我不小心将头文件包含在编译源中时,我遇到了这个问题(此头的行号为#pragma)。要修复此从编译源中删除的标头(可能您需要将其替换为.cpp文件)

  • 这是我遇到的问题,因为我在 makefile 中使用 $^ 作为快捷方式。 (2认同)

Quu*_*one 5

没有-W“#pragma Once in main file”选项,因此您无法通过通常的方式将其关闭。(然而,Clang 开发人员非常清楚,没有-W选项的警告很糟糕,并且有一个一般规则,新的警告总是-W选项。不幸的是,清理代码只是留给沮丧的用户的练习。)

如果你不介意 shell hacky,你总是可以这样做:

# This gives the warning...
clang -c myheader.h

# ...This doesn't.
echo '#include "myheader.h"' | clang -c -x c++-header -o myheader.h.gch -
Run Code Online (Sandbox Code Playgroud)

-像往常一样,尾随的表示“从标准输入读取”。告诉Clang 你正在使用什么语言(因为当没有-x c++文件时它无法从文件扩展名中看出),而更改为意味着我们想要生成 .gch 文件而不是 .o 文件。c++c++-header

.gch由此生成的两个文件并非逐位相同。我对 gch 文件了解不够,无法告诉您它们的行为可能有哪些明显不同。然而,由于您关心的只是 Clang 的 AST,所以我打赌您会满意的。:)


Ser*_*bir -3

没有选项可以控制它,因此只需在代码中禁止此警告即可。