栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[C语言]2021/11/16 C预处理器和C库-#define

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[C语言]2021/11/16 C预处理器和C库-#define

        #define的形式,其实应该以#+define来理解,#的符号含义时替换,而define的意义是定义,其实按照语言的语法来理解很清晰,定义一个东西用来替换另一个东西。

        双引号的作用有一点和#的意思相反的意思,再printf函数中如果使用了“”则再“”中的字符串会被视为普通文本,而不是一个可被替换的符号。例如:

#define TEST01(x)    printf("Hello x is %d.n",((x)*(x));
TEST(2);

输出为:Hello x is 4.

C语言允许在字符串中包含宏参数,而在类函数宏中,#作为一个预处理运算符,可以将记号转变为字符串。

#define TEST02(x)    printf("Hello #x is %d.n",((x)*(x));
TEST02(2);
TEST02(2+4);
输出结果:
        Hello 2 is 4;
        Hello 2+4 is 36;

 在这里,#号就是将2+4文本替换到了x的位置,预处理器不会进行运算,所以它不会输出为6 is 36.

        预处理粘合剂:##运算符,这个符号会将宏替换体中的两个记号粘合在一起,例如:

#define TEST03(n)    x##n;
#define PRINT_TEST03    printf("x"#n"= %dn",x##n);

int main()
{
int TEST03(1) = 14;    //int x1 = 14
PRINT)TEST03(1);       //prinft("x1 = %dn",x1)
}


输出结果为:x1 =14

· 实现宏定义的可变参数 头文件:stdvar.h

顾名思义,函数接受数量可变的参数。

其格式为:

#define TEST04(...)    printf(__VA__ARGS__)

 将红参数列表中最后的参数写成省略号(...),并将__VA__ARGS__可用在替换部分中,表明省略号代表的东西。

#define TEST04(...)    printf(__VA__ARGS__)

TEST04(“Howdy”);
TEST04(“weight = %d,shipping = $%.2fn”,wt,sp);
即展开后的代码:
printf("Howdy");
printf(“weight = %d,shipping = $%.2fn”,wt,sp);

在使用宏时需要注意的事项:

1.宏名中不可以出现空格,但在替换字符串中可以有空格。

2.用圆括号把宏的参数和整个替换体括起来,这样能确保被括起来的部分在下面这样的表达式中可以正确的展开:

forks = 2 * MAX(guests + 3,last);

2.用大写字母表示宏函数的名称。该惯例不如用大写字母白哦是宏常量应用广泛。但是大写字母可以提醒程序员注意,宏可能产生的副作用。

3.如果打算使用宏来加快程序的运行速度,那么首先要确定使用宏和使用函数书否会倒是较大差异。在程序中值使用一次的宏无法明显减少程序的运行时间,在桥套循环中使用宏更有助于提高效率。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号