C语言(宏定义)

预处理:宏定义,文件包含,条件编译

  预处理是在编译之前进行


宏定义:#define 宏名 宏值

  宏定义:不是说明或语句,不需要加分号;

  宏定义的作用域是从定义位置开始到整个程序结束,但可以用 #undef 来终止宏定义的作用域(在终止处加 #undef 宏名

//宏定义允许嵌套 
#define R 5
#define PI 3.14
#define V PI*R*R*R*4/3
//带参数的宏定义:#define 宏名(宏参数) 宏值/参数表达式
#define MAX( x , y ) ((x)>(y)? (x) : (y) )
//每个参数都带括号是为防止不正确输出。例如:
#define SQUARE x * x
SQUARE(5+1)=5+1*5+1=11
//看似像函数,其实有区别:宏定义不需要指明参数的类型,只是做机械式 的替换

#和##是两个预处理运算符;(用于宏定义)

  #:后面跟一个参数,预处理把这个参数转变为一个字符串;

  ##:连接运算符,将左边和右边的参数连接成字符串;

//宏定义也可以传入可变参数(可空参数):
#define SHOWLIST(...)   printf(#__VA_ARGS__)
#define PRINT( format, ...)   printf( format##__VA_ARGS__)
PRINT(num=%d\n,250)————结果会输出:num=250

  注:宏定义是在预编译阶段替换代码中;不像函数一样每次调用都要去申请栈空间(这个角度说明宏定义效率高)

    内联函数(inline):由于函数较宏定义效率低,所以有了内联函数;用关键字( inline )修饰函数;(原理:相当于宏定义展开)
      较宏定义的优点:去除了宏定义的不正确输出的风险(编译器会自动判断并修改内联函数)

猜你喜欢

转载自www.cnblogs.com/TianLiang-2000/p/12696866.html
今日推荐