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

时间:2012-06-01 02:47:00

标签: c

类似#NAME或## NAME。它们在C中意味着什么?我在GCC文件中看到了关于宏的文章。

4 个答案:

答案 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/