类似#NAME或## NAME。它们在C中意味着什么?我在GCC文件中看到了关于宏的文章。
答案 0 :(得分:1)
来自描述C preprocessor的维基百科页面:
##运算符将两个标记连接成一个标记,如下例所示:
#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
答案 1 :(得分:1)
以#
开头的代码语句表明后面是预处理器指令,应该由预处理器扩展。
##
称为令牌 Pasting or Token concatenation macro 。
答案 2 :(得分:1)
运算符##连接两个参数,它们之间没有空格。
#define printe(a,b) a ## b
printe(c,out) << "testing";
输出是:测试
和单#用于字符串参数的参数替换 像
#define st(x) #x
cout<<st(tesing); // equivalent to cout<<"testing";
和#也是预处理器指令..
答案 3 :(得分:0)
'#'实际上不是运算符,它们是预处理程序指令,'##'仅用于函数宏定义。
C中有许多预处理程序指令:
对于宏定义,有:
#define
#undef
对于条件包含,有:
#ifdef
#ifndef
#if
#endif
#else
#elif
对于线路控制,有:
#line
对于错误,有:
#error
对于源文件包含,有:
#include
对于Pragma指令,有:
#pragma
有关详情,请参阅此http://www.cplusplus.com/doc/tutorial/preprocessor/