編譯預處理指令:文件包含指令、宏定義指令、條件編譯指令。“#”開頭,不加分號“;”
1、文件包含指令:
#include<文件名> 標准目錄下搜索
#include"文件名" 當前目錄下搜索,再在標准目錄下搜索
2、宏定義指令:
#define 宏名 宏文本 //宏名習慣大寫
#undef 宏名 //刪除宏
空宏,#define PI //常與條件編譯指令一起使用
無參宏,#define PI 3.14 //常量表達式,PI=3.14
有參宏,#define AREA(x) 3.14*x*x //多參數間用“,”隔開
#include<iostream> #define AREA(x) 3.14*(x)*(x) //如果不加括號,出現3.14*3+7*3+7錯誤 using namespace std; int main() { cout << AREA(3+7) << endl; return 0; }
3、條件編譯指令:可減少被編譯的語句,提高效率。
格式1:
#ifdef 空宏名 //若空宏已經定義,則編譯代碼塊1
代碼塊1
#else
代碼塊2
#endif
格式2:常量表達式可以是包含宏、算術運算、邏輯運算等等的合法C常量表達式。結果不為0(為真),則編譯代碼塊1
#if 常量表達式
代碼塊1
#else
代碼塊2
#endif
說明:#ifdef與#if的區別,#ifdef只判斷宏是否被定義,而不關注其值。#if判斷其值的真假(0假,非0真)。
//格式1: #include<iostream> #define ENGLISH_VERSION //定義空宏,若此行被注釋,執行中文代碼塊 using namespace std; int main() { #ifdef ENGLISH_VERSION //空宏被定義,執行英文代碼塊 cout << "Input a radius please:"; #else //否則,執行中文代碼塊 cout << "請輸入圓的半徑:"; #endif double r; cin >> r; #ifdef ENGLISH_VERSION cout << "Radius is " << r; #else cout << "半徑是" << r; #endif return 0; }
//格式2: #include<iostream> #define ENGLISH_VERSION 0 //定義符號常量 using namespace std; int main() { #if ENGLISH_VERSION //格式2,判斷ENGLISH_VERSION是否為真 cout << "Input a radius please:"; #else //為假,執行中文代碼塊 cout << "請輸入圓的半徑:"; #endif double r; cin >> r; #if ENGLISH_VERSION cout << "Radius is " << r; #else cout << "半徑是" << r; #endif return 0; }