Tim*_*mmm 0 c c++ c-preprocessor
是否有可能使用C++预处理器发出#error一个特定#define的使用?像这样的东西:
#define this_must_not_be_used #error You shouldn't use that.
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,
#define this_must_not_be_used static_assert(false, "You shouldn't use that.");
Run Code Online (Sandbox Code Playgroud)
在C11中,
#define _Static_assert(0, "You shouldn't use that.");
Run Code Online (Sandbox Code Playgroud)
对于C11之前的C或C++之前的C++,您必须考虑一些其他无效表达式,其中包含将在错误消息中显示的字符串.我正在思考
#define this_must_not_be_used ("You shouldn't use that",)
Run Code Online (Sandbox Code Playgroud)
小智 5
没有一种定义宏的标准方法,无论其在哪里使用,宏都会给您带来编译错误,尤其是没有给出清晰有用的错误消息的宏。众所周知,使用它的代码可能只是对结果进行字符串化处理,或者可能是assert预处理器删除的条件的一部分。
对于大多数实践目的,放置可能不能成为有效C(或C ++)程序一部分的东西就足够了。
但是,某些实现确实具有特定于实现的方法,可以准确地实现您的要求。例如,在GCC中,您可以使用
#pragma GCC poison this_should_not_be_used
Run Code Online (Sandbox Code Playgroud)
无论其最终使用方式如何,其后续使用将在以下方面提供:
错误:尝试使用中毒的“ this_should_not_be_used”
您可能需要查看自己的编译器文档,以查看其是否具有相似之处。您还可以使用条件宏定义,以便在GCC中使用此方法,在编译器中使用编译器的方法,对于未知的编译器,则退回到提供宏定义的标准方法,这可能会导致困难。 -读取错误消息。
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |