Daily-C-Study(21):C语言#和##运算符

Daily-C-Study(21):C语言#和##运算符

成于坚持,败于止步

#也是预处理?是的,你可以这么认为。那怎么用它呢? 别急,先看下面例子:

#define SQR(x) printf(“The square of x is %d.\n”, ((x)*(x)));

如果这样使用宏:

SQR(8);

则输出为:

The square of x is 64.

注意到没有,引号中的字符x 被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。

假如你确实希望在字符串中包含宏参数,那我们就可以使用“#”,它可以把语言符号转化为字符串。上面的例子改一改:

#define SQR(x) printf(“The square of “#x” is %d.\n”, ((x)*(x)));
再使用:

SQR(8);

则输出的是:

The square of 8 is 64.

很简单吧?相信你现在已经明白#号的使用方法了。

#的作用是实现文本替换,同样例如

#define HI(x)

#define HI(x)
printf(“Hi,”#x"\n");
void main()
{
HI(John);
}
程序的运行结果:Hi,John

在预编译处理的时候,"#x"的作用是将x替换为所代表的字符序列。在本程序中x为John,所以构建新串“Hi,John”。

和#运算符一样,##运算符可以用于宏函数的替换部分。这个运算符把两个语言符号组合成单个语言符号。看例子:

#define CONNECT(X,Y) X##Y
void main()
{
int a1,a2,a3;
CONNECT(a,1)=0;
CONNECT(a,2)=12;
a3=4;
printf(“a1=%d\ta2=%d\ta3=%d”,a1,a2,a3);
}
则会有以下执行结果:

a1=0 a2=12 a3=4

看明白了没?##就是个粘合剂,将前后两部分粘合起来。
就先到这里,O(∩_∩)O~

我的专栏地址:http://blog.csdn.net/column/details/c-daily-study.html

待续。。。。。。

作者:Ela–学海无涯
来源:CSDN
原文:https://blog.csdn.net/xinyuwuxian/article/details/9033627
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wang2425559/article/details/89534104