#和##运算符在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/