INT_SWAP 宏使用 do{...}while(0) 封装后形态如下: #defineINT_SWAP(a,b) do{ inttmp=a; a=b; b=tmp; }while(0) do{...}while(0) 表示只执行一遍 {} 内的语句,表象来说与 {} 的功能是一致的。不同的是,do{...}while(0) 可以提前退出函数宏、整合为一条语句与强制调用时必须使用 ;。
注:宏定义不需要函数的返回值类型,因此需要确定函数的返回值类型并将其包含在宏定义中。 ④、总结 综上,在{}、do{...}while(0)和({})这三种函数宏的封装方式之中,应: 尽可能不使用{}单大括号模式, 考虑兼容性一般选择使用do{...}while(0)流控制语句块模式, 当需要函数宏返回时可以考虑使用({})小括...
C语言的宏可以分为宏定义和宏函数,宏定义又可以叫做对象式宏,在编译时直接把定义的内容替换到源码处,只是一个文本替换功能,不会进行计算。宏函数又叫做类函数宏,跟函数的使用类似,但是他的本质也是文本的替换,这就有产生很多注意事项。 #defineN10//宏定义#definemax(a,b) (a>b?a:b)//宏函数 不管是宏定义...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: 代码语言:javascript 复制 #defineINT_SWAP(a,b)\ int tmp=a;\ a=b;\ b=tmp ...
c语言函数宏的几种封装方式 在c语言开发中,除了使用函数封装代码之外,也经常使用宏来封装一些重要或简洁的代码。 宏在c开发有三种:预定义宏,不带参宏,和带参数宏,通常,带参数宏也叫函数宏,函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈...
宏函数在C语言中非常常见,也是C语言中非常重要的一个特性。 二、宏函数的定义 宏函数的定义使用#define关键字,具体格式如下: #define 宏名(参数列表) 替换文本 其中,参数列表可以为空或者包含多个参数,替换文本可以是任意合法的代码片段。 三、宏函数的使用 使用宏函数时,需要将宏名和参数列表替换成对应的代码...
规则1:宏体必须使用括号包起来,以便保护表达式中低优先级的操作符。 例: #define square(x)x*x 调用如下: 1/square(n) 会被扩展为 1/n*n 这等价于(1/n)*n,而我们需要的是 1/(n*n) 规则2:在宏定义内部,所有参数的.出现都必须用括号括起来,以便保护实参中任何低优先级的操作符不受宏扩展其他部分的...
(1) 简单的宏定义 格式:#define <宏名/标识符> <字符串> eg:#define PI 3.1415926 说明: ①宏名一般用大写 ②宏定义末尾不加分好; ③可以用#undef命令终止宏定义的作用域 ④宏定义可以嵌套 ⑤字符串“”中永远不包含宏 ⑥宏替换在编译前进行,不分配内存,变量定义分配内存,函数调用在编译后程序运行时进行,...
1 函数与宏 看下面这两段代码有什么区别与联系。 上面这两段代码的功能都是将指针 p 所指的数组元素置为 0,一个是用宏实现的,一个用函数实现的。 宏与函数的区别: 宏是由预处理期直接替换展开的,编译器不知道宏的存在,函数是由编译器直接编译的实体,调用行为由编译器决定 ...