C语言【预处理器】

打印 上一主题 下一主题

主题 904|帖子 904|积分 2716

C语言【预处理器】

1、一些关于预处理的知识

​        C代码中,一般带 # 的都是预处理指令,包括 宏替换、文件包含、条件编译 等。
​        为兼容一些老编译器, # 前后一般不写空格
​        预处理指令后面不加分号。
2、宏定义
  1. // 格式如下
  2. #define 宏名称 (替换文本)                // 这个替换文本记得加上括号,因为是直接文本替换,可能会由于优先级而混乱
  3. // 这个替换文本可以是字面量、表达式、函数等
复制代码
  1. // 带参数的宏。 举个例子
  2. #define print_int(n) printf("%d\n", n)
  3. void main(){
  4.     // 宏的使用
  5.     int a = 10;
  6.     print_int(a);
  7. }
复制代码
  1. // 宏可嵌套
  2. #define PI 3.14
  3. #define S PI*2*2
复制代码
  1. // 使用宏定义数据类型
  2. #define BOOL int
复制代码
  1. 取消宏定义。在想解除宏定义的代码前加 #undef 宏名称。之后的代码就不能使用定义好的宏了。
复制代码
  1. // 带参数的宏。举个例子
  2. #define print_int(n) printf("%d\n", n)        // 这个参数不能指定类型,需要自己谨慎,但这种方法比函数高效
复制代码
3、文件包含

​        自定义头文件,用" " 。 引号里填相对路径或绝对路径。基于当前目录加./或不加
​        头文件如果使用 " " 会先从当前目录下找,找不到再从系统找。
​        头文件如果使用  会直接从系统找。
​        Win和Linux路径分隔符分别是什么?
4、条件编译
  1. #if 条件 ... #elif ... #else ... #endif                // 这个endif不能省略
  2. #ifdef 宏名称 ... #else ... #endif                                // 宏名称定义过则条件成立。没有 #elif
  3. #if defined 宏名称 ... #elif ... #else ... #endif        // 同上。 可以有 #elif
  4. #ifndef 宏名称 ... #else ... #endif                // 宏名称没有定义过则条件成立。没有 #elif
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表