第6天 C语言预处理

ANSI 标准定义的 C 语言预处理指令:
在这里插入图片描述

另外 ANSI 标准 C 还定义了如下几个宏:
LINE 表示正在编译的文件的行号
FILE 表示正在编译的文件的名字
DATE 表示编译时刻的日期字符串,例如: “25 Dec 2007”
TIME 表示编译时刻的时间字符串,例如: “12:30:55”
STDC 判断该文件是不是定义成标准 C 程序
如果编译器不是标准的,则可能仅支持以上宏的一部分,或根本不支持。当然编译器 也有可能还提供其它预定义的宏名。注意:宏名的书写由标识符与两边各二条下划线构成。

预编译命令

C编译器提供的预处理功能主要有以下四种:
1)文件包含 #include
2)宏定义 #define
3)条件编译 #if #endif …
4)一些特殊作用的预定义宏

include< > 与 #include ""的区别

""表示系统先在file1.c所在的当前目录找file1.h,如果找不到,再按系统指定的目录检索。
< >表示系统直接按系统指定的目录检索。

注意:
1. #include <>常用于包含库函数的头文件
2. #include ""常用于包含自定义的头文件
3. 理论上#include可以包含任意格式的文件(.c .h等) ,但我们一般用于头文件的包含。

#undef

#undef 是用来撤销宏定义的,用法如下:
#define PI 3.141592654

// code
#undef PI
//下面的代码就不能用 PI 了,它已经被撤销了宏定义。
也就是说宏的生命周期从#define 开始到#undef 结束。很简单,但是请思考一下这个问题:
#define X 3
#define Y X*2
#undef X
#define X 2
intz=Y;
z 的值为多少?

#error的用法

			#error 预处理指令的作用是,编译程序时,只要遇到 #error 就会生成一个编译错误提 示消息,并停止编译。其语法格式为:

#error error-message
注意,宏串 error-message 不用双引号包围。遇到#error 指令时,错误信息被显示,可能同时 还显示编译程序作者预先定义的其他内容。
#error用于生成一个编译错误消息,并停止编译

#line的用法

#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
#line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符
命令的基本形式如下:
#line number[“filename”]
其中[]内的文件名可以省略。
例如:
#line 30 a.h
其中,文件名 a.h 可以省略不写。 这条指令可以改变当前的行号和文件名,例如上面的这条预处理指令就可以改变当前的行号 为 30,文件名是 a.h。初看起来似乎没有什么用,不过,他还是有点用的,那就是用在编译 器的编写中,我们知道编译器对 C 源码编译过程中会产生一些中间文件,通过这条指令, 可以保证文件名是固定的,不会被这些中间文件代替,有利于进行分析。

pragma

在所有的预处理指令中,#pragma 指令可能是复杂的了,它的作用是设定编译器的 状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法, 在保持与 C 和 C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译 指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为:
#pragma para 其中 para 为参数,下面来看一些常用的参数。

#pragma para 其中 para 为参数,下面来看一些常用的参数。
#pragma是编译器指示字,用于指示编译器完成一些特定的动作
#pragma所定义的很多指示字是编译器和操作系统特有的
#pragma在不同的编译器间是不可移植的

希望关注点赞评论,传递知识
想要关注我一起学习的请关注公众号:莫林的日常
想要和志同道合的伙伴一起学习的请加QQ群:515271405

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值