#pragma warning clang / msvc兼容性

时间:2017-01-13 14:46:55

标签: c++ clang llvm-clang pragma

我正在编写一些clang / msvc交叉兼容代码。

我注意到clang并不认为这是一个未知的警告:

#pragma warning(disable:4444)

(其中4444只是一个例子;实际的禁用警告是多方面的)

clang(clang-c2和llvm)是否解释了#pragma禁用警告,类似于cl.exe解释警告被禁用的内容?

或者数字无关?

1 个答案:

答案 0 :(得分:2)

不是答案,但作为评论的时间太长了。

我能找到关于实现#pragma兼容性的唯一提及是:

http://releases.llvm.org/3.6.2/tools/docs/UsersManual.html

  

clang支持Microsoft #pragma pack功能来控制记录布局。 GCC还包含对此功能的支持,但是MSVC和GCC是不兼容的clang遵循MSVC定义。

     

clang支持Microsoft #pragma comment(lib,“foo.lib”)功能,用于自动链接指定的库。目前,此功能仅适用于Visual C ++链接器。

     

clang支持Microsoft #pragma comment(linker,“/ flag:foo”)功能,用于向COFF目标文件添加链接器标志。用户有责任确保链接器理解标志。

没有提及#pragma警告,所以我怀疑它会被忽略,除非在某处有更多信息。

不知道如何测试它,因为我不明白什么条件会产生4444警告。

同样在该页面上:

  

Microsoft扩展

     

clang对Microsoft Visual C ++的扩展提供了一些实验性支持;要启用它,请使用-fms-extensions命令行选项。这是Windows目标的默认设置。 请注意,支持不完整。某些构造(如类上的dllexport)会被警告忽略,而其他构建(例如Microsoft IDL注释)将被忽略。

     

clang有一个-fms-compatibility标志,使clang接受足够的无效C ++,以便能够解析大多数Microsoft标头。例如,它允许对从属基类成员进行非限定查找,这是clang的常见兼容性问题。 Windows目标默认启用此标志。