常量
#define F(n) 2*n怎么打计算F(3+2)? F(4+3)可以吗
int n = 3 + 2;
int r = F(n); 这不是常量,这是宏替换。
代码中的F(n)替换成 2*n
#include <stdio.h>
#define F(n) 2*n
int main(void)
{
int n = 2;
printf("%d\n", F(n));
return 0;
} 本帖最后由 major_lyu 于 2020-3-2 20:49 编辑
带参数的宏展开的过程是字符替换
#define F(n) 2*n
那么F(3+2) 的展开结果就是把n替换成3+2, 即2*3+2
F(4+3)的结果就是 2*4+3
如果你F(n)的意思是计算n的2倍的话,应该定义#define F(n)2*(n)
这样不管n是什么表达式,替换之后n的表达式的计算都处于最高优先级。
F(3+2)展开是2*(3+2)。
你需要好好体会一下宏定义展开和函数调用的不同
函数调用的时候如果参数是一个表达式,那么调用函数时参数表达式会先被求值然后在用求得的值传递给函数
而宏展开的时候是不会对参数进行求值的,而是先按照宏定义把表达式原封不动的替换到宏中定义的参数的位置,然后再对整个宏的展开式求值。
带参数的宏的调用和函数的调用方式是相同的:
#include<stdio.h>
#define F(n) 2*(n)
int main()
{
printf("F(3+2)=%d", F(3+2));
printf("F(4+3)=%d", F(4+3));
return 0;
}
页:
[1]