正向定义GCC的pragma
我正在寻找一个解决方案来为GCC转发声明/定义一个pragma 我使用消息pragma作为待办事项列表(#pragma消息“做这个和那个”)。 但是,我希望通过以下构造完全启用/禁用消息: 警告,这是伪代码:正向定义GCC的pragma,c,macros,C,Macros,我正在寻找一个解决方案来为GCC转发声明/定义一个pragma 我使用消息pragma作为待办事项列表(#pragma消息“做这个和那个”)。 但是,我希望通过以下构造完全启用/禁用消息: 警告,这是伪代码: // Definition #if 1 // generate todo list #define ADD_TODO(msg) #pragma message "[todo]" msg #else #define ADD_TODO(msg) /*empty*/ #endif // Usag
// Definition
#if 1 // generate todo list
#define ADD_TODO(msg) #pragma message "[todo]" msg
#else
#define ADD_TODO(msg) /*empty*/
#endif
// Usage
ADD_TODO("this may result in unitialized variables, fix this")
有人有过这种构造的经验吗?您需要
\u Pragma
预处理操作符(在C99中引入):
运算符解决了无法在
#define
中使用预处理器指令(例如#pragma
)的问题。它需要一个字符串文字参数,手工构造是非常不切实际的,这就是为什么您通常会看到它被包装在宏中,使用#
(字符串化)操作符构造字符串,如上面的代码片段所示。需要>=C99,(=C99标准的第6.10.9节).好的,我会检查一下。非常感谢。(注:我使用C11,因为它在2019年:-)
// Definition
#define PRAGMA(...) _Pragma(#__VA_ARGS__)
#if 1 // generate todo list
#define ADD_TODO(msg) PRAGMA( message "[todo]" msg)
#else
#define ADD_TODO(msg) /*empty*/
#endif
// Usage
ADD_TODO("this may result in unitialized variables, fix this")