C++中預(yù)定義宏的實(shí)現(xiàn)
C++中有許多預(yù)定義宏,這些宏在程序編譯時(shí)由編譯器自動(dòng)定義,并可以在代碼中使用。預(yù)定義宏通常用于調(diào)試、條件編譯、文件信息、平臺(tái)特定配置等方面。以下是一些常見的預(yù)定義宏及其具體使用方法和示例。
1. __FILE__
說明:__FILE__
是一個(gè)字符串宏,表示當(dāng)前源代碼文件的名稱(包括路徑)。
使用方法:通常用于調(diào)試或日志記錄,以顯示當(dāng)前文件的名稱。
示例:
#include <iostream> int main() { std::cout << "This code is in file: " << __FILE__ << std::endl; return 0; }
輸出:
This code is in file: /path/to/your/sourcefile.cpp
2. __LINE__
說明:__LINE__
是一個(gè)整數(shù)宏,表示當(dāng)前源代碼的行號(hào)。
使用方法:常用于調(diào)試或錯(cuò)誤報(bào)告,幫助開發(fā)者快速定位問題發(fā)生的源代碼行號(hào)。
示例:
#include <iostream> int main() { std::cout << "This is line: " << __LINE__ << std::endl; return 0; }
輸出:
This is line: 6
3. __DATE__
說明:__DATE__
是一個(gè)字符串宏,表示編譯源代碼時(shí)的日期(格式:Mmm dd yyyy
,例如:Sep 3 2024
)。
使用方法:可以用于生成代碼的編譯日期,常見于版本控制和構(gòu)建信息。
示例:
#include <iostream> int main() { std::cout << "Compiled on: " << __DATE__ << std::endl; return 0; }
輸出:
Compiled on: Sep 3 2024
4. __TIME__
說明:__TIME__
是一個(gè)字符串宏,表示編譯源代碼時(shí)的時(shí)間(格式:hh:mm:ss
,例如:14:30:15
)。
使用方法:用于記錄代碼編譯的時(shí)間,通常在日志或調(diào)試輸出中使用。
示例:
#include <iostream> int main() { std::cout << "Compiled at: " << __TIME__ << std::endl; return 0; }
輸出:
Compiled at: 14:30:15
5. __STDC__
說明:__STDC__
是一個(gè)宏,當(dāng)代碼是嚴(yán)格符合標(biāo)準(zhǔn)的 C 語(yǔ)言程序時(shí)(即不使用任何擴(kuò)展),這個(gè)宏會(huì)被定義。對(duì)于 C++ 編譯器,它表示是否遵循 C 標(biāo)準(zhǔn)。
使用方法:主要用于條件編譯,確定是否使用標(biāo)準(zhǔn) C 語(yǔ)言的一些特性。
示例:
#include <iostream> int main() { #ifdef __STDC__ std::cout << "The program is compiled with a standard C compiler!" << std::endl; #else std::cout << "The program is compiled with a non-standard compiler!" << std::endl; #endif return 0; }
輸出:
The program is compiled with a standard C compiler!
6. __cplusplus
說明:__cplusplus
是一個(gè)宏,用于表示當(dāng)前編譯環(huán)境支持的 C++ 標(biāo)準(zhǔn)版本。它的值是一個(gè)整數(shù),代表 C++ 標(biāo)準(zhǔn)的年份和修訂版本。
常見值:
- 199711L:C++98。
- 201103L:C++11。
- 201402L:C++14。
- 201703L:C++17。
- 202002L:C++20。
使用方法:通常用于判斷當(dāng)前編譯環(huán)境使用的 C++ 標(biāo)準(zhǔn)版本。
示例:
#include <iostream> int main() { #if __cplusplus == 199711L std::cout << "C++98 Standard" << std::endl; #elif __cplusplus == 201103L std::cout << "C++11 Standard" << std::endl; #elif __cplusplus == 201402L std::cout << "C++14 Standard" << std::endl; #elif __cplusplus == 201703L std::cout << "C++17 Standard" << std::endl; #elif __cplusplus == 202002L std::cout << "C++20 Standard" << std::endl; #else std::cout << "Unknown C++ Standard" << std::endl; #endif return 0; }
輸出:
C++17 Standard
7. __GNUC__, __GNUG__
說明:__GNUC__
和 __GNUG__
是 GNU 編譯器(GCC)所定義的宏。__GNUC__
表示 GCC 的主版本號(hào),__GNUG__
用于判斷是否是 GNU C++ 編譯器。
使用方法:通常用于平臺(tái)特定的編譯選項(xiàng)或特性,以判斷是否在 GCC 編譯器下編譯代碼。
示例:
#include <iostream> int main() { #ifdef __GNUC__ std::cout << "Compiled with GCC, version " << __GNUC__ << "." << __GNUC_MINOR__ << std::endl; #endif return 0; }
輸出:
Compiled with GCC, version 10.2
8. __declspec (Microsoft特定)
說明:__declspec
是 Microsoft 編譯器特有的一個(gè)關(guān)鍵字,用于指定函數(shù)、變量或類型的屬性。例如,用于聲明 DLL 導(dǎo)入或?qū)С龇?hào)。
使用方法:在 Windows 編程中常用于定義函數(shù)的導(dǎo)入導(dǎo)出。
示例:
#include <iostream> __declspec(dllexport) void hello() { std::cout << "Hello, world!" << std::endl; } int main() { hello(); return 0; }
說明:
__declspec(dllexport)
是 Microsoft 的擴(kuò)展,用來聲明函數(shù)為 DLL 的導(dǎo)出函數(shù)。
9. __VA_ARGS__
說明:__VA_ARGS__
是用于宏定義中的可變參數(shù)的宏,它代表宏調(diào)用時(shí)傳遞給宏的所有額外參數(shù)。
使用方法:常用于實(shí)現(xiàn)日志記錄、調(diào)試信息等功能,可以支持可變參數(shù)宏。
示例:
#include <iostream> #define LOG(msg, ...) std::cout << "LOG: " << msg << __VA_ARGS__ << std::endl int main() { LOG("Error: ", "File not found\n"); return 0; }
輸出:
LOG: Error: File not found
10. #ifdef / #ifndef / #endif
這些并非直接的預(yù)定義宏,但它們與預(yù)定義宏結(jié)合使用來控制條件編譯:
示例:
#include <iostream> #define DEBUG int main() { #ifdef DEBUG std::cout << "Debug mode is enabled." << std::endl; #else std::cout << "Debug mode is disabled." << std::endl; #endif return 0; }
輸出:
Debug mode is enabled.
總結(jié)
- 這些預(yù)定義宏提供了關(guān)于文件、日期、時(shí)間、編譯器、標(biāo)準(zhǔn)版本等的信息,并常用于調(diào)試、日志記錄和條件編譯。
- 它們?cè)诳缙脚_(tái)開發(fā)、庫(kù)開發(fā)和調(diào)試中尤為重要,幫助開發(fā)者在不同環(huán)境下編寫更具可移植性的代碼。
到此這篇關(guān)于C++中預(yù)定義宏的文章就介紹到這了,更多相關(guān)C++ 預(yù)定義宏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)單鏈表的基本操作分享
單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語(yǔ)言中單鏈表的基本操作,需要的可以參考一下2022-10-10C++常量詳解二(常量形參,常量返回值,常量成員函數(shù))
這篇文章主要介紹了C++常量詳解二(常量形參,常量返回值,常量成員函數(shù)),需要的朋友可以參考下2017-06-06C語(yǔ)言實(shí)現(xiàn)彈跳小球項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)彈跳小球項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05c++中關(guān)于int、long、long?long等取值范圍
這篇文章主要介紹了c++中關(guān)于int、long、long?long等取值范圍,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02C++?Boost?ProgramOptions超詳細(xì)講解
Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱2022-11-11C++ vector如何動(dòng)態(tài)申請(qǐng)內(nèi)存的元素
vector是一種動(dòng)態(tài)數(shù)組,本文主要介紹了C++ vector如何動(dòng)態(tài)申請(qǐng)內(nèi)存的元素,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C?語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲完整示例代碼
這篇文章主要介紹了如何使用C語(yǔ)言生成1到100之間的隨機(jī)數(shù),并提供了一個(gè)簡(jiǎn)單的猜數(shù)字游戲的實(shí)現(xiàn)代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03