#和##运算符在C中做了什么?

像#NAME或## NAME之类的东西。 它们在C中意味着什么? 我在GCC文件中看到了关于宏的问题。

operator ##连接两个参数,它们之间没有空格。

#define printe(a,b) a ## b printe(c,out) << "testing"; 

输出是:测试

而single#用于参数替换,如字符串参数

 #define st(x) #x cout< 

和#也是一个预处理器指令..

#开头的代码语句表示后面是预处理器指令,应该由预处理器扩展。

##被称为令牌粘贴或令牌连接宏

从描述C预处理器的维基百科页面:

##运算符将两个标记连接成一个标记,如下例所示:

 #define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t DECLARE_STRUCT_TYPE(g_object); // Outputs typedef struct g_object_s g_object_t; 

#运算符向C预处理器发出其他指令信号,例如: #include, #define, #undef, #error, #if, #ifdef, #ifndef, #else, #elif, #endif

‘#’实际上不是运算符,它们是预处理程序指令,’##’仅用于函数宏定义。


C中有许多预处理程序指令:

对于宏定义,有:

 #define #undef 

对于条件包含,有:

 #ifdef #ifndef #if #endif #else #elif 

对于线路控制,有:

 #line 

对于错误,有:

 #error 

对于源文件包含,有:

 #include 

对于Pragma指令,有:

 #pragma 

有关更多信息,请阅读http://www.cplusplus.com/doc/tutorial/preprocessor/