(C语言进阶)预处理详解

发布时间:2024年01月23日

一、预定义符号

add.c?

#include<stdio.h>
//外部函数定义
void test()
{
	printf("test():%s\n",__FILE__);
}

?text.c

#include<stdio.h>
extern void test();	//声明外部函数
int main()
{
	test();
	return 0;
}

#include<stdio.h>
extern void test();	//声明外部函数
int main()
{
	test();
	printf("%s\n", __FILE__);
	return 0;
}

#include<stdio.h>
int main()
{
	//打印进行编译的源文件
	printf("%s\n", __FILE__);
	//打印文件当前的行号
	printf("%d\n", __LINE__);
	//打印文件被编译的日期
	printf("%s\n", __DATE__);
	//打印文件被编译的时间
	printf("%s\n", __TIME__);
	//如果编译器遵循ANSI C,返回值为1,否则未定义
	//printf("%d\n", __STDC__);
	return 0;
}

二、#define定义常量

定义常量——宏定义不会计算,只会直接替换

?

?

?

?

定义代码

?

?

?

不可加分号?

三、#define定义宏

?

?

宏定义只会直接替换,不会进行计算

?

?

?

?

例题:?

?

?

?

四、带有副作用的宏定义

?

?

例子:写一个宏,求两个数的较大值?

?

五、宏替换的规则

?

?

六、宏与函数的对比

?

?

例子:

?

七、#和##?

#运算符——将宏的一个参数不转化为相应的值,而是作为字符串保存下来

?

?

?

printf函数可以将两个字符串打印成一个字符串?

?

?

##运算符——将左右两边在预编译后链接在一起,否则会报错

?

?

?

八、命名约定

?

九、#undef

?

十、命令行定义——在编译过程中,加上-D可以在代码中改变一些变量的值

?

十一、条件编译——控制一行程序或多行程序是否编译

?

常见的条件编译指令?

?

?

为真则编译,否则跳过,条件编译指令都是成对存在?

?

?

定义时编译?

?

未定义时编译?

?

十二、头文件的包含

头文件被包含的方式

本地文件包含——自己构造的头文件的包含

?

?

库文件包含

嵌套文件包含——头文件被重复包含,其内容也会重复出现

十三、其他预处理指令

文章来源:https://blog.csdn.net/2301_79580018/article/details/135713528
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。