在C语言的程序中包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分,通过预处理命令可扩展C语言程序设计的环境
小复习
预处理,预编译是编译的第一步。
会有三件基本的事情发生:
- 引入#include
- 去除注释
- 修改#define
1、内置符号
这些符号都可以直接使用:
__FILE__ 点c文件全名
__LINE__ 当前行号
__DATE__ 编译日期
__TIME__ 编译时间
举例:
#include<stdio.h>
int main() {
printf("文件全名:%s\n", __FILE__);
printf("当前运行行号:%d\n", __LINE__);
printf("编译日期:%s\n", __DATE__);
printf("编译时间:%s\n", __TIME__);
return 0;
}
效果:
2、自定义符号
#define 名 值
不带分号。预编译阶段,所有名字会被值替换。
举例:给printf取个别名。
#include<stdio.h>
#define say printf
int main() {
say("你好,世界!\n");
return 0;
}
效果:
举例:自定义一个死循环符号。
#include<stdio.h>
#define loop while(1)
int main() {
int i = 0;
loop{
if (i > 1000) {
break;
}
else {
printf("你好,世界!\t%d\n",i);
i++;
}
}
return 0;
}
效果:
3、自定义宏
和自定义符合差不多。
相当于函数,只不过在预编译的阶段就会执行。
然后替换掉。
#define 名 ( 参数列表 ) 表达式
举例:输出字符串。
#include<stdio.h>
#define say(s)printf(s)
int main() {
say("你好,世界!\n");
return 0;
}
效果:
替换逻辑:递归。
看参数有没有define,有就套娃。
直到没有,替换自己。
字符串内部的符号会被忽略。
4、条件编译
可以用#define定义一个符号,代表是否要执行。
#include<stdio.h>
#define __DEBUG__ 1
int main() {
if (__DEBUG__) {
printf("调试模式开启\n");
}
else {
printf("调试模式关闭\n");
}
return 0;
}
效果:
同时,可以让这段代码直接跳过编译。
#include<stdio.h>
#define __DEBUG__ 1
int main() {
#if __DEBUG__
printf("调试模式开启\n");
#endif
return 0;
}
这种写法也有配套的选择分支。
#include<stdio.h>
#define __DEBUG__ 0
#define __WARN__ 1
int main() {
#if __DEBUG__
printf("调试模式\n");
#elif __WARN__
printf("警告模式\n");
#else
printf("正常模式\n");
#endif
return 0;
}
效果:
到此这篇关于C语言简明讲解预编译的使用的文章就介绍到这了,更多相关C语言预编译内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言简明讲解预编译的使用
基础教程推荐
- C/C++编程中const的使用详解 2023-03-26
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C语言 structural body结构体详解用法 2022-12-06
- 一文带你了解C++中的字符替换方法 2023-07-20
- C利用语言实现数据结构之队列 2022-11-22
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C++详细实现完整图书管理功能 2023-04-04
- C++中的atoi 函数简介 2023-01-05
- 如何C++使用模板特化功能 2023-03-05
- 详解c# Emit技术 2023-03-25