c语言里,关于宏定义的使用
2015-09-25 09:31
363 查看
宏定义最关键的是要注意它只是一个文本替换,不注意的话,很容易引起歧义,看下面一段代码:
#include<stdio.h>
#define M( x ) ( x*x )
int main()
{
int a, b= 3;
a = M( b+2 );
printf ("%d\n" , a );
return 0;
}
这里的 M 是想要得到 x 的平方,而在程序中调用的参数为 b+2 ,原本想将 a 赋值为 (b+2)*(b+2),也就是 25 ,但是由于宏定义是展开在预处理时期,也就是在编译之前,此时 b 并没有赋值,这时候的 b 只是一个符号。 因此在程序中被展开为: (b+2*b+2); 所以程序执行后的结果为 a 的值为11。
所以为了达到原来的目的,我们可以把宏定义 M 改为:
#define M(x) ( (x) * (x) )
就可以变为平方的形式了
#include<stdio.h>
#define M( x ) ( x*x )
int main()
{
int a, b= 3;
a = M( b+2 );
printf ("%d\n" , a );
return 0;
}
这里的 M 是想要得到 x 的平方,而在程序中调用的参数为 b+2 ,原本想将 a 赋值为 (b+2)*(b+2),也就是 25 ,但是由于宏定义是展开在预处理时期,也就是在编译之前,此时 b 并没有赋值,这时候的 b 只是一个符号。 因此在程序中被展开为: (b+2*b+2); 所以程序执行后的结果为 a 的值为11。
所以为了达到原来的目的,我们可以把宏定义 M 改为:
#define M(x) ( (x) * (x) )
就可以变为平方的形式了
相关文章推荐
- 【第4周 项目2 - 建设“单链表”算法库】
- 单例模式及C++实现代码
- 我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗
- c语言的开始。前三天。
- c++课堂
- C++ 多态(一)
- C++ Virtual Table
- C++ 中统一用 using namespace std; 有何弊端?
- C++Primer第五版 练习11.8(解答)
- C++Primer第五版 练习11.7(解答)
- C++Primer第五版 11.2.1节练习
- C和指针 (学习之旅)
- 关于C++中new的一些理解
- C++编程思想学习笔记---第12章 运算符重载
- C++ 项目经验总结:程序严谨性(一)
- 【C++】动态内存分配
- c++设计模式-----命令模式
- C语言的第不知道多少天
- C/C++ 之 ‘++’、‘+’、‘+=’、‘-’、‘()’、‘--’ 操作符的重载实现重载
- C/C++ 之 操作符重载