可以将宏函数当作普通的函数来使用。 下面是一个宏定义函数的示例: #include <stdio.h> // 定义宏函数求两个数的和 #define sum(a, b) (a + b) int main() { int num1 = 10, num2 = 20; int result = sum(num1, num2); // 使用宏函数 printf("Sum: %d\n", result); return 0; } ...
规则1:宏体必须使用括号包起来,以便保护表达式中低优先级的操作符。 例: #define square(x)x*x 调用如下: 1/square(n) 会被扩展为 1/n*n 这等价于(1/n)*n,而我们需要的是 1/(n*n) 规则2:在宏定义内部,所有参数的.出现都必须用括号括起来,以便保护实参中任何低优先级的操作符不受宏扩展其他部分的...
这里的Side Effect是指宏在展开的时候对其参数可能进行多次Evaluation(也就是取值),但是如果这个宏参数是一个函数,那么就有可能被调用多次从而达到不一致的结果,甚至会发生更严重的错误。比如: #definemin(X,Y) ((X) > (Y) ? (Y) : (X))//...c= min(a,foo(b)); 这时foo()函数就被调用了两次。为...
在C语言程序中,宏定义“define”的一种有趣的用法 上述C语言程序,就是使用printf函数,在屏幕上输出“hello world”,在示例代码1中,代码变得认不出了,是因为在第3行到第9行,使用了“#define”宏定义语句,将“int”、“void”、“main”、“printf”、“return”等字样,替换为了不同长度的下划线。 宏定义,其实...
如这个例子所显示的,带参数的宏经常用来作为一些简单的函数使用。MAX类似一个从两个值中选取较大的值的函数。IS_EVEN则类似于另一种函数,该函数当参数为偶数时返回1,否则返回0。 下面的例子是一个更复杂的宏: 1.#define TOUPPER(c)('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c)) 这个宏检测一个字符...
1. 宏定义 在C语言中,宏定义是一种预处理指令,用于创建常量值、函数宏和条件编译等。它们通过预处理器在编译之前进行替换。 1.1 创建常量 #define PI 3.14159 #define MAX_SIZE 100 1.2 创建函数宏 #define SQUARE(x) ((x) * (x)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) ...
(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的。这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行,执行完后再跳转回来。 注:宏定义和函数的最大差别就是:宏定义是原地展开,因此没有调用开销;而函数是跳转执行再返回,因此函数有比较大的调...
宏定义可完成简单的操作,但复杂的操作还是要由函数调用来完成,而且宏定义 所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。 4 结语 本文对C语言中宏定义#define在使用时容易出现的问题进行了解析,并从C源程序处理过程的角度对#define的处理进行了分析,也对它的优点进行 了阐述。
利用宏可以提高代码的运行效率: 子程序的调用需要压栈 30、出栈, 这一过程如果过于频繁会耗费掉大量的CPU运算资源. 所以一些代码量小但运行频繁的代码如果采用带参数宏来实现会提高代码的运行效率.函数宏的参数是固定的情况函数宏的定义采用这样的方式: #define name( args tokens其中的args和tokens都是可选的. 它...