预处理详解

Posted 萌新的日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了预处理详解相关的知识,希望对你有一定的参考价值。

(文章目录)

一、预处理符号

#include<stdio.h>
int main()

 printf("%s\\n",__FILE__);//输出该文件所在具体位置
 printf("%d\\n",__LINE__);//行号 所以用%d
 printf("%s\\n",__DATE__);//目前所处的日期
 printf("%s\\n",__TIME__);//目前所处的时间
 

二、#define作用

1.#define定义符号

(1).定义为常量

#define M 1000
#include<stdio.h>
int main()

 int ret=M;
 printf("%d\\n",ret);
 return 0;
 

(2).为关键字创建一个简短的名字

#define reg register
#include<stdio.h>
int main()

 reg int sum=1000;
 return 0;

 

(3).用符号替换一种实现

#deifne do_forever for(;;)
int main()

 do_forever;//for(;;); 死循环
 return 0;

(4).在#define后面加分号

#define M 1000;
int main()//这里程序会报错

 int a=5;
 int b=8;
 if(a<10)
  a=M;//这里宏替换后是 a=1000;; 多的分号自成一个语句 多个语句需要括号
  else
  b=0;
  return 0;

2.#define定义宏

(1).机制

(2).宏的申明方式

(3).练习题

#define square (x) x*x
int main()

 printf("%d\\n",square(3+1));//3+1传过去替换x 3+1*3+1=7
 return 0;

#define square(x) x+x
int main()

 printf("%d\\n",10*square(4));//将4传过去替换x  即10*4+4=44
 return 0;

三、#和##

1.#

#作用是找到该对象所对应内容的字符串

#define PRINT printf("the value of" #x"is %d\\n",x)
int main()

 int a=10;
 PRINT(a);
 int b=5;
 PRINT(b);
 return 0;

2.##

##代表将两个字符连在一起

#define cat(x,y) x##y
int main()

 int yourage=20;
 printf("%d\\n",cat(your,age));//将your和age连接起来 为yourage再计算 为20
 return 0;

将 your##age--->yourage

四、带副作用的宏参数

#define max(x,y) x>y?x:y
int main()

 int a=5;
 int b=8;
 int ret=max(a++,b++);
 printf("%d\\n",ret);
 return 0;

五、宏和函数的对比

六、条件编译

1. #undef

用于移除宏定义

#define M 1000
int main()

 int a=M;
 #undef M
 printf("%d\\n",M);//这里会报错 因为 M的宏定义被移除了
 return 0;

2. 与//相同作用的移除

#ifdef 0
#define M 1000
int main()

 int a=M;
 printf("%d\\n",a);
 return 0;

#endif

3.多个分支条件编译

#include<stdio.h>
int main()

  #ifdef 1==1//1==1为真 执行下面内容 输出hehe
  printf("hehe\\n");
  #elif 1==2//为假 跳过下面内容
  printf("hehe\\n);
  #else//都不成立 执行hehe
  printf("hehe\\n");
  #endif
  return 0;

4.判断是否被定义

#define PRINT 
int main()

 #ifdef PRINT
 printf("hehe\\n");//如果PRINT没定义 则不参与编译
 #endif
 return 0;

以上是关于预处理详解的主要内容,如果未能解决你的问题,请参考以下文章

CALayer 详解

Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解

Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解

Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解

Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解

Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解