美文网首页
C语言的宏定义中的符号

C语言的宏定义中的符号

作者: 和谐共处 | 来源:发表于2017-06-09 16:39 被阅读40次

"#"

"#"的作用是将标记转换为字符串

例:
#define add(x) printf("%s = %d \n",#x,x)

add(4+4) 将会输出4+4 = 16 #x就表示4+4

"##"

"##"运算符是把两个语言符号组合成一个语言符号

例:

#define format(n) n##_##元

format(5) 展开将会是 5_元

当##在参数中时意义不同
另外在define func(fmt, args...)printf(fmt, ##args)
宏定义中,##的作用是当func()传递的只有一个参数时,
这时宏定义展开多出来一个"," ,##的作用就是消除这个多余的逗号,当传递的参数多余两个时,##不起作用。

"..."

"..."表示有多个参数

例:

define func(fmt, args...)printf(fmt, ##args)
define func(fmt, ...)printf(fmt, ##__VA_AGRS__)

二者是等效的,其中"..."表示可变参数的含义,而__VA_ARGS__是一个可变参数的宏,很少人知道这个宏,
这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)

ANSI C标准中常用的几个标准预定义宏

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

相关文章

网友评论

      本文标题:C语言的宏定义中的符号

      本文链接:https://www.haomeiwen.com/subject/ofjfqxtx.html