22

警告:#pragma once 在主文件中

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

是否可以禁用该警告?

4

5 回答 5

12

使用-Wno-pragma-once-outside-header命令行参数。在此处查阅 Clang 文档。

于 2016-03-10T12:34:39.853 回答
10

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

于 2015-04-23T15:41:34.113 回答
5

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

如果你不介意 shell 黑客,你总是可以做这样的事情:

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

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

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

这样生成的两个.gch文件并非逐位相同。我对 gch 文件知之甚少,无法告诉您它们的行为可能有哪些明显不同。但是,由于您只关心 Clang 的 AST,我敢打赌您会没事的。:)

于 2014-02-12T22:15:10.077 回答
0

在编译源代码时使用-w(lowercase wnot uppercase ) 选项来抑制此类警告。W

于 2016-09-10T19:03:16.087 回答
-3

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

于 2013-05-24T10:47:27.173 回答