本文共 669 字,大约阅读时间需要 2 分钟。
C语言用#define 来定义宏。我们可以用宏来定义宏常量。宏常量的本质是字面量,字面量是不占用内存的。
宏是没有语法检查的,语法错误只能被编译器检测。宏是由预处理器处理的。在预处理处理期间,只是进行简单的文本替换,所以会出现一些副作用比如参数是不会进行计算的。
另外#define表达式的使用类似函数表达式。#define表达式可以比函数更强大,但也比函数更容易出错。
比如: #define _SUM_(a,b) (a)+(b)
#define _MIN_(a,b) (a)<(b)?(a):(b)
#define _DIM_(a) sizeof(a)/sizeof(*a)
int a=0,b=3,c=0;
c= _MIN_(a++,b) ;//这是原因 c=(a++)<(b)?(a++):(b);
问a=多少?c=多少?
宏表达式被预处理器处理,编译器是不知道宏表达式的。
宏表达式用实参代替形参,不进行任何运算。宏表达式没有调用开销
宏表达式不能定义递归。
比如:#define _SUM_(n) ((n>0)?_SUM_(n-1)+n0:0) //这样定义是错误的。
另外宏常量和表达式是没有作用域的。
如:void test()
{
#define PI 3.1415
#define Area(r) r*r*PI;
}
double crecle (double r)
{
return Area(r);
}
int main()
{
printf("%f\n",crecle(3));
}
学习交流群199546072
转载地址:https://blog.csdn.net/qq_39809601/article/details/81488733 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!