🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星TOP100~2022博客之星TOP63~周榜159 ⌁ 总榜751~ 🆔本文由 謓泽 原创 CSDN首发🙉 如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客 📃 📣系列专栏-【C】系列_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
目录
预定义符号一共有⑤种,如下所示↓
那么我们用上面的代 码打印来分别看看它们的最终打印出的结果吧,代码示例如下↓
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
printf("%s\n", __FILE__);
printf("%d\n", __LINE__);
printf("%s\n", __DATE__);
printf("%s\n", __TIME__);
printf("%s\n", __FUNCTION__);
//在vs上不支持STDC
printf("%d\n",__STDC__)
return 0;
}
运行结果🖊
main.c 6 Mar 15 2022 07:38:23 main 1
拓展知识点
#error: 可以进行自定义编译器报错.
#line: 可以定制化你的文件名以及代码行号(__FILE__&__LINE__)
#pragma:用于指定计算机或操作系统特定的编译器功能(#pragma message ("str"))不会报错条件是否存在.
#pragma warning(disable:num):消除警告.
那么接下来我们就来用 fopen() 函数来写下"日志"打开文件为 log.txt,在做这个之前我们先复习下原来的知识点如下↓
代码示例如下💤
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
FILE* pf = fopen("log.txt", "a+");
if (pf == NULL)
{
perror("fopen");
return 1;
}
fprintf(pf, "%s %d %s %s %s\n", __FILE__, __LINE__, __DATE__, __TIME__, __FUNCTION__);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
说明-O-从上述的结果当中可以看出,成功打印出了"日志"信息。
条件编译一句话:满足条件就编译,不满足条件就不编译。
在编译一个程序的时候,我们如果将一条语句或者是一组的语句编译再或者是放弃是非常的方便的。因为我们有条件编译的指令。比如↓
调试行的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。
举出下面的例子代码如下↓
在这里会举出两个例子①参与编译、②不参与编译。在这里我们先举出第②个例子↓
#include<stdio.h>
int main(void)
{
#ifdef PRINT
printf("hello C");
#endif
}
运行结果如下↓
无,那么这个是为什么呢。实际上就是我们用了条件编译语句。把它给屏蔽了也就是不参与编译了。
#ifdef PRINT
//
#endif
那么我们想让上面代码参与编译我们该怎么办呢。实际上很简单+#define 即可。
#include<stdio.h>
#define PRINT
int main(void)
{
#ifdef PRINT
printf("hello C");
#endif
}
运行结果🖊
hello C
#if指令
#endif指令
#else指令
//如果宏定义了PRINT执行,否则执行#else
#ifdef PRINT
printf("HELLO");
#else
printf("C");
#endif
#elif指令
#ifdef 和 #ifndef 指令
⒈为何要有条件编译?
本质是为了进行对应的达到裁剪代码的目的,而我们裁剪代码的目的通常很丰富具体是和你的应用场景有关系的。有的是为了进行一个版本之间的维护的,例如:有商业版和免费版等...当然我们还有可能使用条件编译完成其它的事情。
⒉条件编译如何使用?
在上述条件编译讲解当中我们也说过的,这里就不在描述了。大家可以自己上手用代码描述一下。
⒊条件编译在哪些地方使用?
通常用于中大型项目当中会使用到条件编译以及版本之间的维护(某某软件完全版和精简版)当然条件编译还可以完成一些其它的事情。
★结论⇢条件编译的本质是对代码进行裁剪。