C语言--宏定义与分析

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

猜你喜欢

转载自blog.csdn.net/qq_39809601/article/details/81488733