预处理详解
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;
以上是关于预处理详解的主要内容,如果未能解决你的问题,请参考以下文章
Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解
Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解
Transformer代码详解(-)-从数据处理到嵌入包含数据集可构造/数据嵌入和位置嵌入的详解