C語言(預處理)
阿新 • • 發佈:2018-11-23
- 預處理
在程式編譯之前進行的處理,所有的編譯預處理命令以#開頭。分為巨集定義、檔案包含、條件編譯。
1. 巨集
巨集定義的作用是某段程式碼的別名,以#define開頭,結尾不用分號。
eg:#define PI 3.14//巨集名一般用大寫字母
在編譯預處理時,只是簡單的替換。巨集名的有效範圍是從定義位置到檔案結束。如需終止巨集定義的作用域,可以用#undef命令。
eg:#define PI 3.14
//......
#undef PI
若已定義的識別符號在字串中出現,則不替換。
eg:
- 無參巨集:上述為無參巨集
#define R 2.0
#define PI 3.14
#define L 2*PI*R//可以在巨集定義的時候引用已定義的巨集
- 有參巨集:
#define S(a,b) a*b
S(1+2,3);//表示式替換成a+b*3
#define S(a,b) (a)*(b)//此時S(1+2,3)將替換成(1+2)*3
注:有參巨集定義時,巨集名與引數間不能有空格,否則將空格後
字元替換成巨集名(成為無參巨集)。
- 有參巨集:
2.檔案包含
將指定的檔案內容嵌入到指定原始檔中,包括兩種方式。
#include"xxx.x"//通用方式。此方式一般包含自己寫的檔案,即先在原始檔所在目錄中查詢要包含的檔案,若未能找到則按標準方式查詢。
#include<xxx.x>//標準方式。此方式只在c語言編譯器的c函式庫標頭檔案中查詢要包含的檔案。
3.條件編譯
#ifdef 巨集名 /*程式段1*/
判斷某個巨集是否被定義, 若已定義, 執行隨後的程式段1(類似於if判斷語句)。#else/*程式段2*/
if判斷後,若巨集未定義則執行程式段2。
eg:#define PI 3.14
#ifdef PI
程式段1
#else
程式段2
#ifndef 巨集名 /*程式段1*/
r若巨集名沒有被定義則執行程式段1
#endif
為#if, #ifdef, #ifndef這些條件命令的結束標誌。