1

#NAME 或 ##NAME 之类的东西。它们在 C 中是什么意思?我在关于宏的 GCC 文档中看到了它们。

4

4 回答 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 回答