问题 是否可以在clang中禁用此警告?警告:#pragma在主文件中一次


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

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

是否可以禁用该警告?


4205
2018-05-24 01:17


起源



答案:


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


5
2018-03-10 12:34



警告:未知警告选项'-Wno-pragma-once-outside-header' - Sergey
谢谢@Sergey,这对我来说很有用。 - W1M0R
我确认它适用于clang 5.0.1 - scinart


答案:


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


5
2018-03-10 12:34



警告:未知警告选项'-Wno-pragma-once-outside-header' - Sergey
谢谢@Sergey,这对我来说很有用。 - W1M0R
我确认它适用于clang 5.0.1 - scinart


当我不小心在编译源中包含头文件时,我有这个东西(这个头有#pragma一次行)。要从编译源修复此删除标头(可能需要将其替换为.cpp文件)


4
2018-04-23 15:41



这是我遇到的问题,因为我在makefile中使用$ ^作为快捷方式。 - VaelynPhi


没有 -W “#pragma once in main file”的选项,因此您无法通过常规方式将其关闭。 (但是,Clang开发人员非常清楚没有警告 -W 选项很糟糕,而且有一个通用的规则  警告 总是 得到 -W 选项。清理  不幸的是,代码留给了受挫的用户。)

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

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

# ...This doesn't.
echo '#include "myheader.h"' | clang -c -x c++-header -o myheader.h.gch -

尾随 -和往常一样,意思是“从stdin读取”。该 -x c++ 告诉Clang你正在使用什么语言(因为它在那里无法从文件扩展名中分辨出来  没有文件)和改变 c++ 至 c++-header 意味着我们要生成.gch文件而不是.o文件。

他们俩 .gch 这样产生的文件是  逐位相同。我不太了解gch文件,告诉你他们的行为可能有什么明显不同。但是,因为你所关心的只是Clang的AST,我敢打赌你会好起来的。 :)


3
2018-02-12 22:15





使用 -w (小写 w 不是大写的 W)编译源以抑制此类警告时的选项。


2
2017-09-10 19:03



我可以确认这适用于gcc 5.4 - Julian


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


-2
2018-05-24 10:47