編譯預處理指令:文件包含指令、宏定義指令、條件編譯指令


編譯預處理指令:文件包含指令、宏定義指令、條件編譯指令。“#”開頭,不加分號“;”

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM