C_Learning (4)
/ 预处理命令
/ 宏定义
/ 一般形式:#define 宏名 字符串
# 表示这是一条预处理命令
宏名是一个标识符,必须符合C语言标识符的规定
字符串可以是常数、表达式、格式化字符串等
/ 注意:
(1)如果在串中含有宏名,则不进行替换
(2)如果串长于一行,可在行末尾用"\"续行
(3)#define 出现在程序中函数的外面,宏名的有效范围为整个源文件
(4)可以用#undef 终止宏定义的作用域
(5)宏定义时参数要加括号,如不加括号,有时会引起错误
(6)宏扩展必须使用括号来保护表达式中低优先级的操作符
/ #include 指令
/ 在一个源文件中使用#include 指令可以将另一个源文件的全部内容包含进来,且被读入的源文件必须使用双引号或者尖括号括起来
/ 双引号与尖括号的区别
尖括号:系统到存放C函数库头文件所在的目录中寻找要包含的文件
双引号:系统先在用户当前目录中寻找要包含的文件,若找不到,再到存放C函数库头文件所在的目录中寻找要包含的文件[在双引号中给出文件路径]
/ 头文件
/ 一般情况下,可将如下内容放入 .h 头文件中
(1)宏定义
(2)结构、联合和枚举声明
(3)typedef 声明
(4)外部函数声明
(5)全局变量声明
/ 条件编译
/ 一般情况下,源程序中所有的行都参加编译,但有时只希望对一部分内容在满足一定条件时才进行编译,就需要使用一些条件编译命令
/ #if 条件编译指令
(1)
#if 参数表达式
程序段
#endif
(2)
#if 参数表达式1
程序段1
#else
#if 参数表达式n
程序段n
#endif(n个)
(3)
#if 参数表达式1
程序段1
#elif 参数表达式n
程序段n
#endif
如果参数表达式为真,则编译#if 和 #endif 之间的程序段,否则跳过不编译
/ #ifdef 条件编译指令
#ifdef 宏替换名——如果宏替换名已被定义,则对语句段进行编译
#ifndef 宏替换名——如果宏替换名未定义,则对语句段进行编译
/ #line 条件编译指令
#line 用于改变 _LINE_ 与 _FILE_ 的内容,_LINE_ 用于存放当前编译行的行号,_FILE_ 用于存放当前编译的文件名
#line 行号["文件名"]
/ #pragma 条件编译指令
#pragma 的作用是设定编译器的状态,或者指示编译器完成一些特定的操作
#pragma 参数
参数包括:
(1) Message: 在编译信息输出窗口中输出相应的信息
(2) code_seg: 设置程序中函数代码存放的代码段
(3) once: 保证头文件被编译一次
/ 预定义宏名
_LINE_ 当前被编译代码的行号
_FILE_ 当前源程序的文件名称
_DATA_ 当前源程序的创建日期
_TIME_ 当前源程序的创建时间
_STDC_ 判断当前编译器是否为标准C,若其值为1表示符合,否则不符合