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 ;
}