Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正向定义GCC的pragma_C_Macros - Fatal编程技术网

正向定义GCC的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

我正在寻找一个解决方案来为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
// 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")