宏函数是C语言中一种非常有用的机制,它可以在编译时进行简单的文本替换,从而实现代码的重用和性能的提升。宏函数的定义和使用相对简单,但在使用过程中需要注意参数的类型匹配、括号的使用等问题。正确地使用宏函数可以使代码更加简洁、高效和可维护。 参考资料 •《C Primer Plus》 •《C语言程序设计》©...
int c = ADD(a, b); // c = 3 四、宏函数与普通函数的区别 1. 宏函数在预处理阶段展开,而普通函数在编译阶段生成机器码。 2. 宏函数没有返回值类型和参数类型检查,容易出现类型错误。 3. 宏函数会产生大量冗余代码,在程序体积较大时会影响程序性能。 4. 普通函数可以使用局部变量和递归调用等高级特性...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
通过gcc -E -P 1.c>2.c 命令,把1.c源码文件展开复制到2.c文件中,就可以通过2.c文件找到对应展开的宏函数代码: 可以看到展开后的宏函数在源码中的表现,如果在if或者while等语句不加大括号时,代码执行的效果和预期的不同,不了解过程的就会不好排查问题。 | 测试二 只加小括号会不会能解决问题呢,其实这个...
1. 函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: 代码语言:javascript 复制 #defineINT_SWAP(a,b)\ int tmp=a;\ ...
使用宏函数可以通过#define指令将其定义为简单的代码段,使程序编写更加快捷简单,同时也方便程序的修改和维护。 例如,在计算圆形面积时,可以通过宏函数实现: define CIRCLE_AREA(r) (3.14*(r)*(r)) 在程序中,可以直接调用宏函数,如下所示: int main() { int r=5; float area=CIRCLE_AREA(r); printf("Th...
({}) 为 GNU C 扩展的语法,非 C 语言的原生语法,封装后形态如下: ({}) 既可以用于分支语句中,也可以作为右值,例如: 这种函数宏的优缺点: 优点:支持在无花括号且有分支的 if 语句中直接调用;有返回值,支持作为表达式的右值。 缺点:不支持提前退出函数宏;非 C 的原生语法,编译器可能不支持。
如下示例: #include<stdio.h>#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}int main(){ int x=0,y=0; scanf("%d%d",&x,&y); sum (x,y); return 0;}拓展资料使用宏函数或者宏函数时,注意如下...
然后我们可以使用上面这个宏函数来完成在C语言环境中对信号变量的某些bit位进行操作,参考如下代码: //定义一个16位宽的wdata变量 uint16_t wdata; //对其赋初值为16'habcd wdata = 0xabcd; //改变第0~3bit的值为f,则最终值为16'habcf wdata = SET_BITS_N_M_Y(wdata, 0, 3, 0xf); 其实知道以...
C语言位操作宏定义函数Set_bit Get_bit 宏 位操作宏定义 我们在写C语言时,经常需要用到位操作,但是每次自己使用逻辑运算符进行操作的时候,很费脑子,试试下面几个宏定义吧: #defineGET_BIT(value,bit)((value)&(1<<(bit)))//读取指定位#defineCPL_BIT(value,bit)((value)^=(1<<(bit)))//取反指...