预处理器

1. 预定义符号:

__FILE__ 源文件名字
__LINE__ 文件当前行号
__DATE__ 文件被编译的日期
__TIME__ 文件被编译时间
__FUNCTION__ 输出当前函数名称
__STDC__ 如果编译器遵循 ANSIC,返回值为 1

 

 

 

 

 

 

 

int main(void){
  printf("%s\n",__FUNCTION__);
  return 0;
}
/*
输出结果:main
*/

 2. #define 的使用

    宏定义是文本的替换,注意:文本替换值将宏定义的内容更换了一个名字,在预编译时,进行替换操作,因此在使用时,尤其是带参宏,将参数带入比较是否是自己需要的运算。

  注: 带参宏的参数一定要使用括号括起来,表达式也要使用括号括起来,否则当参数是一个表达式时,可能会出现异常的结果,最简单的办法就是将参数使用宏定义替换,看是否能得到预期结果。

#define MAX(A,B)  ( (A) > (B) ? (A) : (B)))

3. 单参数的宏的数据类型:宏中的参数是没有类型的,只要参数合法,可以使用任何类型,这点是相比较调用函数的优势,因为函数传参要指定参数类型。

#define MALLOC(n,type) \
            ( (type *)malloc( (n) * sizeof(type) ) )
//--eg
pi = MALLOC(25, int );

4. # 的使用

  宏定义中 ‘#’ 符号能将参数变为 字符串文本

#define  PRINTF(FORMAT,VALUE)  \
              printf("the value of " #VALUE "is" FORMAT "\n",VALUE)

int main(void){
int x = 5;
PRINTF("%d", x + 5);
}
/**
输出结果: the value of x + 5 is 10
*/

 

posted @ 2022-02-15 12:01  爬上那个坡  阅读(60)  评论(0编辑  收藏  举报