c语言宏函数 c语言宏函数怎么算

c语言有没有把一个宏作为函数参数的 。的确是不可以当函数的参数,但是可以换一个间接的思路 。
【c语言宏函数 c语言宏函数怎么算】将宏定义放在另一个函数里,通过取地址的方式来把你原先想去处理的参数进行处理 。
示例如下:
#includestdio.h
#define cal(m) {m = m + 10;}
int main(void)
{
int Val_0 = 20;
test(Val_0);
printf("%d", Val_0);
system("pause");
}
int test(int *n)
{
cal(*n);
printf("hello\n");
return 0;
}
c语言中的“宏”是指什么?宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解 。
1. 不带参数的宏定义:
宏定义又称为宏代换、宏替换,简称“宏” 。
格式: #define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名” 。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串 。
掌握"宏"概念的关键是“换” 。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换” 。
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改 。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查 。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边 , 作用域为其后的程序 , 通常在文件的最开头 。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存 。
2. 带参数的宏定义:
除了一般的字符串替换,还要做参数代换 。
C语言-函数式宏 函数式宏(function-like macro)较之对象式宏可以进行更复杂c语言宏函数的代换 。
函数式宏 sqr 是在编译时展开并填入程序的c语言宏函数,因此 只要是能用双目运算符 * 进行乘法计算的数据类型c语言宏函数,都能使用函数式宏。
函数定义则需为每个形参都定义各自的数据类型,返回值的类型也只能为一种 。就这点而言,函数较为严格 。
函数为我们默默无闻地进行了一些复杂处理,如:
而函数式宏所做的工作只是宏展开和填入程序,并不进行上述处理 。
根据以上特征, 函数式宏或许能使程序的运行速度稍微提高一点,但是程序自身却有可能变得臃肿。
函数式宏在使用上必须小心谨慎 。例如,sqr(a++) 展开后 ((a++) * (a++))。每次展开,a 的值都会自增两次 。在不经意间表达式被执行了两次 , 导致程序出现预料之外的结果,我们称这种情况为宏的 副作用(side effect)。
c语言宏函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言宏函数怎么算、c语言宏函数的信息别忘了在本站进行查找喔 。

    推荐阅读