编译预处理指令

85 阅读1分钟

编译预处理指令

  • #开头的是编译预处理指令
  • 在编译之前就处理了
  • 在#include处将头文件里面的所有东西替换这个#include语句
  • 他们不是c语言的成分,但是C语言离不开他们
  • 条件编译(保证这个头文件只会被#include一次)
    #ifndef _LIST_HEAD_
    #define _LIST_HEAD_
    
    #include "node.h"
    
    typedef struct _list{
        Node *head;
        Node *tail;
    }List;
    
    #endif
    
    
  • error等
  • #define用来定义一个宏
    • #define <名字> <值>
    • 他们不是c语言的语句,所以不用加;(如果加了';'会导致将';'也一并替换下去)
    • 名字必须是一个单词,值可以是任何东西
    • 在编译之前,编译预处理程序会将程序里面里的名字换成值
    • 完全的文本替换
    • 预定义的宏
      • LINE
      • FILE
      • DATE
      • TIME
      • STDC
    • 像函数的宏
      • #define cube(x) ((x)(x)(x))
      • 宏可以带参数
        • 整个值要括号
        • 参数出现的每个地方都要有括号
    • 部分宏会被inline函数替代
  • 声明和定义
    • 声明是不产生代码的(只有声明可以被放在头文件中)
      • 函数原型
      • 变量声明
      • 结构声明
      • 宏声明
      • 枚举声明
      • 类型声明
      • inline函数
    • 定义是产生代码的
      • 函数定义
      • 全局变量定义