本文主要讲述c语言中#和##的用法
#
- # 将右边的参数做整体的字符串替换。
- 对于#的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
#include<stdio.h>
#define dprint(expr) printf(#expr"=%d\n",expr);
int main()
{
int a=20,b=10;
dprint(a/b);
return 0;
}
/*
输出:a/b=2
*/
##
- 将左右两边的参数做整体的字符串拼接替换。
- 同#,对于##的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
- 经过##替换后的内容必须能够作为一个合法的变量。
#define f(a,b) a##b
则
f(1,2) 替换拼接成12
f(i,1) 替换拼接称i1
以上f(i,1) 中,如果程序中没有i1的定义,则即便是通过了宏替换,也不能编译通过。
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
int a2=3;
//printf("%s\n",f(a,2));错误,没有a2的字符串变量
printf("%d\n",f(a,2));//正确
printf("%s\n", h(f(1,2)));
printf("%s\n", g(f(1,2)));
return 0;
}
/*输出
3
12
f(1,2)
*/