[c语言]c语言中的#和##作用、参数表省略号作用

1. c语言中的#

c语言中的# 用于字符串化参数 #123 相当于 “123”

#define STR(X) #X
print(STR(123));// 输出字符串 “123”

2. c语言中的##

c语言中的## 用于将两个语言符号组合成单个语言符号

#define N(x) N##x
int N(1) = 1; //N1 = 1
int N(2) = 2;  //N2 = 2

3. c语言函数参数…

...__VA_ARGS__ 一般用在一起,用于表示可变参数

#define PR(...) printf(__VA_ARGS__)
int main()
{
    int wt=1,sp=2;
    PR("hello\n");
    PR("weight = %d, shipping = %d",wt,sp);
    return 0;
}
输出结果:
hello
weight = 1, shipping = 2
省略号只能代替最后面的宏参数。
#define W(x,...,y)错误!

##__VA_ARGS__宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错

参考:

  1. c语言中的# ## 可变参数宏 …和_ VA_ARGS _