天天看點

C語言總結:預處理指令

C語言總結:預處理指令

2019-3-30

預處理指令可以提高程式設計效率,但其不是C語句,編譯系統不能直接對它們進行編譯,而是在編譯前會轉換為C源程式,然後編譯時去掉了預處理指令。

1. 宏定義

宏定義在使用時,系統隻是用宏名之後的部分替換語句中包含的宏名,如果是含參宏定義,将實際的參數替換定義時字元串中的對應參數。是以在寫宏定義時要注意,宏隻是内容的替換,是以要嚴格遵守文法規則。

//無參宏定義
# define PI 3.1415926

//含參宏定義
# define S(a, b) a*b
area = S(3,2);  // area = 6

//限制宏定義的作用于
# define PI 3.1415926
...    //PI 的有效範圍
# undef PI
           

2. 檔案包含

C源代碼常包含頭檔案,也是一種預處理指令。

有兩種包含形式,尖括号、雙撇号:

#include <file.h>
#include "file.h"
           

二者差別在于,用尖括号時,系統到存方C庫函數頭檔案的目錄中尋找要包含的檔案,這稱為标準方式。用雙撇号時,系統先在使用者目前目錄中尋找要包含的檔案,若找不到,再按标準方式查找。

一般來講,如果調用庫函數而用#include 指令來包含頭檔案,常用尖括号,以節省查找時間。若包含的是使用者自己定義編寫的檔案,一般用雙撇号(不在目前目錄中的檔案需給出檔案路徑)。

3. 條件編譯

通過人為控制,使得程式中的部分内容在一定條件下才進行編譯,即對該部分内容指定編譯的條件。

幾種形式:

//1)若辨別符被定義過,編譯程式段
# ifdef 辨別符
...
# else
...
# endif

//2)若辨別符未被定義過,編譯程式段
# ifndef 辨別符
...
# else
...
# endif

//3)當表達式為真時,編譯程式段,可節省編譯所用時間。
# if 表達式
...
# else
...
# endif
           

程式示例:

#include <stdio.h>
#define RUN 
void main(){
  # ifdef RUN
  printf("Define RUN\n");
  # else
  printf("Undefine RUN\n");
  # endif
  return ;
}