Qan*_*123 4 c++ preprocessor compiler-errors pragma compiler-warnings
我需要将一些特定的警告视为错误,以确保程序按预期运行。例如,具有该[[nodiscard]]属性的函数应始终返回,否则编译器会打印错误。在 Visual Studio (MSVC) 中,可以很容易地通过以下方式做到这一点:
#pragma warning (error: warning_id)
Run Code Online (Sandbox Code Playgroud)
这非常有效。但我在集群上运行此代码,使用 GCC、Clang 或 Intel 编译器,因此我希望实现此代码以便可移植。就像是:
#if defined(_MSC_VER)
#pragma warning (error: 4834)
#elif defined(__GNUC__)
// what here?
#elif defined(__clang__)
// what to put here?
#else
// Another compiler...
#endif
Run Code Online (Sandbox Code Playgroud)
我认为Intel与MSVC类似;在 Clang 中,有一个选项可以将错误视为警告-Wno-error=some_error,这可以反过来帮助我,但可能有太多警告,我宁愿不将其视为错误。
我应该怎么办?
对于 GCC 和 clang,将#pragma特定警告提升为错误的过程非常相似。
对于海湾合作委员会:
\n#pragma GCC diagnostic error "-Wunused-result"\nRun Code Online (Sandbox Code Playgroud)\n对于叮当声:
\n#pragma clang diagnostic error "-Wunused-result"\nRun Code Online (Sandbox Code Playgroud)\n正如您所假设的,英特尔 C/C++ 编译器确实支持 MSVC 样式#pragma(并且它还定义了_MSC_VER宏,因此您可以使用相同的#if defined...块)。
对于“其他”编译器,显然很难说 \xe2\x80\x93 您需要检查您可能使用的每个编译器的手册。据我所知,没有标准(跨平台)方法可以做到这一点。另请注意,仅仅因为编译器预定义了_MSC_VER宏,并不能保证它也支持所有 MSVC 风格的#pragma语法。
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |