C语言中#和#和##分别有什么用啊

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:55:10
C语言中#和#和##分别有什么用啊,#是什么用在关于字符串的引用的??##是用来连接什么参数的?什么意思哦,麻烦举个小小的例子哈 谢谢啦~

c语言中,##表示把两个宏参数贴合在一起,而单个#的功能是将其后面的宏参数进行字符串化操作。即,
#include<stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
printf("%s\n",h(f(1,2)));//输出12
printf("%s\n",g(f(1,2)));//输出f(1,2)
return 0;
}

##被称为连接符(直接贴合),用来将两个宏参数连接为一个宏参数。而单个#的功能是将其后面的宏参数进行字符串化操作,简单地说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号,使其成为字符串。

#是将输入参数加上""变为字符串,如,定义宏:
#define p(s) put(#s)

使用宏p(hello world),则替换为:
put("hello world")

## 是连接符号
如,定义宏:
#define func(aa, bb, cc) aa##_##bb(cc)
则宏
func(average, sqrt, ref)
展开为
average_sqrt(ref)
可见它可能编程一个真正的函数调用。

##:
Token-Pasting Operator (##)
define paster( n ) printf( "token" #n " = %d", token##n )
int token9 = 9;

If a macro is called with a numeric argument like

paster( 9 );

the macro yields

printf( &qu