c 学习笔记 c预处理器和c库 清明节篇

c预处理器在程序执行之前查看程序, 根据预处理指令, 将符号缩写替换为表示的内容, 预处理器可以包含程序需所需的其他文件, 选择让编译器查看哪些代码。基本上预处理器工作只是把一些文本转换为其他文本。

翻译程序的第一步

预处理之前编译器会对程序作出一些翻译处理:编译器将源文件中出现的字符映射, 该过程处理多字节字符和三字符序列;
随后编译器定位每个反斜杠后面跟着换行符的实例, 并删除他们, 将数个物理行(physical line)转换成一个逻辑行(logical line);
随后编译器把文本划分为预处理记号序列, 空白序列和注释序列, 编译器将用一个空格字符替换每一条注释。
最后程序进入预处理阶段, 查找一行中以#开始的预处理指令。

明示常量(manifest constant): #define

其也称为符号常量, 以#作为一行的开头, ANSI与后来的标准允许#前有空格或制表符。
但是该指令还有其他用途:

#include <stdio.h>
#define TWO 2
#define OW "Consistency is the last refuge of the unmagins\
tive. -Oscar Wilde"
#define FOUR TWO*TWO
#define PX printf("X is %d.\n", x)
#define FMT "X is %d.\n"

int main(void)
{
	int x = TWO;

	PX;
	x = FOUR;
	printf(FMT, x);
	printf("%s\n", OW);
	printf("TWO: OW\n");
	return 0;
}

每行#define都由三部分组成:

  1. #define指令本身
  2. 选定的缩写, 也称为宏
    (有些宏代表值, 这些宏称为类对象宏(object-like macro), 还有类函数宏(function-like macro), 宏的名称不允许有空格, 只能使用c变量的命名规则)
  3. 称为替换列表或替换体, 程序在找到宏的示实例后, 用替换体代替这个宏, 其过程称之为宏展开(macro expansion).
    (可以在#define行使用标准c注释)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值