我正在编写一些clang / msvc交叉兼容代码。
我注意到clang并不认为这是一个未知的警告:
#pragma warning(disable:4444)
(其中4444只是一个例子;实际的禁用警告是多方面的)
clang(clang-c2和llvm)是否解释了#pragma
禁用警告,类似于cl.exe解释警告被禁用的内容?
或者数字无关?
答案 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目标默认启用此标志。