#NAME 或 ##NAME 之类的东西。它们在 C 中是什么意思?我在关于宏的 GCC 文档中看到了它们。
问问题
140 次
4 回答
1
从描述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
于 2012-06-01T02:52:57.597 回答
1
以 开头的代码语句#
表示后面是预处理器指令,应由预处理器扩展。
##
称为令牌粘贴或令牌连接宏。
于 2012-06-01T02:53:54.050 回答
1
运算符 ## 连接两个参数,它们之间没有空格。
#define printe(a,b) a ## b
printe(c,out) << "testing";
输出是:测试
并且单个 # 用于使用字符串参数替换参数,例如
#define st(x) #x
cout<<st(tesing); // equivalent to cout<<"testing";
和 # 也是一个预处理器指令..
于 2012-06-01T11:48:58.143 回答
0
'#' 实际上不是运算符,它们是预处理器指令,而'##' 仅用于函数宏定义。
C中有许多预处理器指令:
对于宏定义,有:
#define
#undef
对于有条件的包含,有:
#ifdef
#ifndef
#if
#endif
#else
#elif
对于线路控制,有:
#line
对于错误,有:
#error
对于源文件包含,有:
#include
对于 Pragma 指令,有:
#pragma
有关更多信息,请阅读此http://www.cplusplus.com/doc/tutorial/preprocessor/
于 2012-06-01T03:02:03.157 回答