宏替换的理解
1、带参数宏定义时只能说独立参数,不能加运算符。
2、可以说宏替换优先级是最高的,防止替换后表达式有变化。
3、无论如何,#define mal(x, y) (x * y)要写成#define mal(x, y) ((x) * (y)),这样才会得到我们期望中的结果。
#include #define mal(x, y) (x * y) //带参数宏,参数替换表达式参数int main()
{int i = 3,j = 3;int a;char **b[5][6]; //指针数组a = mal(i++, sizeof(b) + 5);//sizeof(b)==sizeof(char *)*5*6printf("%d\n", a);a = j++*sizeof(b) + 5; //after macro,not a = j++*(sizeof(b) + 5);printf("%d\n", a);a = i++*4;printf("%d\n", a);a = i++*sizeof(3);printf("%d\n", a);return 0;
}
output
365
365
16
20
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
