【小白学习C++ 教程】十四、C++ 中预处理器
@Author:Runsen
預處理器程序提供預處理器指令,它告訴編譯器在編譯之前對源代碼進行預處理。
所有這些預處理器指令都以“#”符號開頭。’#’ 符號表示任何以# 開頭的語句都將進入預處理程序,預處理程序將執行該語句。
一些預處理器指令的實例為:#include, #define, #ifndef,
- 宏
- 文件包含
- 條件編譯
- 其他指令
例如,#include 將在程序中包含額外的代碼。我們可以將這些預處理器指令放在C++程序的任何地方。
宏
現在讓我們詳細了解這些指令中的每一個。
宏:宏是程序中的一段代碼。每當編譯器遇到此名稱時,編譯器都會用實際的代碼段替換該名稱。’#define’ 指令用于定義宏。現在讓我們在程序的幫助下理解宏定義:
#include <iostream>// 宏 #define LIMIT 5 int main() {for (int i = 0; i < LIMIT; i++) {std::cout << i << "\n";}return 0; }在上面的程序中,當編譯器執行單詞LIMIT時,它用5 替換它。宏定義中的單詞’LIMIT’ 稱為宏模板,‘5’ 是宏擴展。
注意:宏定義末尾沒有分號(’;’)。宏定義不需要分號結束。
帶參數的宏:我們也可以將參數傳遞給宏。使用參數定義的宏與函數的工作方式類似。讓我們通過一個程序來理解這一點:
#include <iostream>// 帶參數的宏 #define AREA(l, b) (l * b) int main() {int l1 = 10, l2 = 5, area;area = AREA(l1, l2);std::cout << "Area of rectangle is: " << area; //50return 0; }在上面的程序,每當編譯器在程序中找到AREA(l, b) 時,它就會用語句 (l*b) 替換它。不僅如此,傳遞給宏模板 AREA(l, b)的值也將在語句 (l*b)中被替換。因此 AREA(10, 5) 將等于 10*5。
文件包含
文件包含:這種類型的預處理器指令告訴編譯器在源代碼程序中包含一個文件。
用戶可以在程序中包含兩種類型的文件: 頭文件或標準文件。
這些文件包含預定義函數的定義,如 printf()、scanf() 等。必須包含這些文件才能使用這些函數。不同的函數在不同的頭文件中聲明。例如,標準 I/O 函數在C++ 中的 ‘iostream’ 文件中,而執行字符串操作的函數在 ‘string’ 文件中。
語法:#include<file_name>
其中file_name是要包含的文件的名稱。'<'和'>'括號告訴編譯器在當前目錄中查找文件。
條件編譯
條件編譯:條件編譯指令是一種指令,可幫助編譯程序的特定部分或根據某些條件跳過程序某些特定部分的編譯。這可以在兩個預處理命令“ ifdef”和“ endif ”的幫助下完成。
#ifdef macroname 程序段1 #else程序段2 #endif條件編譯選項:#if #ifdef #ifndef #else #elsif #end
這些以#號開頭的定義稱作條件編譯表達式,滿足其條件的內容會被編譯到預處理的源代碼文件中,而不滿足條件的內容不會被編譯到預處理的源代碼中。例如:
#define TEST 1 #if TEST == 1int a = 1; #elseint a = 2; #endif其他指令
除了上述指令外,還有兩個不常用的指令。
這些是:
#undef 指令:#undef 指令用于取消定義現有的宏。該指令的作用是:
使用此語句將取消定義現有的宏 LIMIT。在此語句之后,每個“#ifdef LIMIT”語句都將評估為 false。
#pragma Directive:該指令是一個特殊用途的指令,用于打開或關閉某些功能。這種類型的指令是特定于編譯器的,即它們因編譯器而異。
#pragma startup和#pragma exit:這些指令幫助我們指定在程序啟動之前(在控制傳遞給 main() 之前)和程序退出之前(就在控制從 main() 返回之前)
#include <iostream> using namespace std;void func1(); void func2();#pragma startup func1 #pragma exit func2void func1() {cout << "Inside func1()\n"; }void func2() {cout << "Inside func2()\n"; }int main() {void func1();void func2();cout << "Inside main()\n";return 0; }Inside func1() Inside main() Inside func2()上面的程序不適用于 GCC 編譯器,當在 GCC 編譯器上運行時,上面的代碼將產生如下輸出:
Inside main()因為 GCC 不支持 #pragma啟動或退出。
Code:創建函數來檢查素數
#include <iostream> using namespace std;bool checkPrimeNumber(int);int main() {int n;cout << "Enter a positive integer: ";cin >> n;if (checkPrimeNumber(n))cout << n << " is a prime number.";elsecout << n << " is not a prime number.";return 0; }bool checkPrimeNumber(int n) {bool isPrime = true;// 0 and 1 are not prime numbersif (n == 0 || n == 1) {isPrime = false;}else {for (int i = 2; i <= n / 2; ++i) {if (n % i == 0) {isPrime = false;break;}}}return isPrime; }總結
以上是生活随笔為你收集整理的【小白学习C++ 教程】十四、C++ 中预处理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小白学习C++ 教程】十三、C++命名
- 下一篇: MESUX米岫的品牌核心是什么呢?有了解