Home C++ 的條件編譯(中文)
Post
Cancel

C++ 的條件編譯(中文)

C++ 的條件編譯

你在看 C++ 的 code 時,特別是大項目的 code,一定會看到 #ifdef or #ifndef …etc, 很多這樣的程式片段,有的在 IDE 上顯示正常,有的比較灰, 這到底是在幹嘛的?重要嗎?

非常重要 !!! 沒有注意到的話,很有可能你辛辛苦苦修改的 code,但其實在 不正確的組態下修改,導致根本跟沒有修改一樣,bug 同樣存在,被客戶念,被 QA 哭腰。

C++ 條件編譯的目的

C++ 的條件編譯是一種在編譯過程中,根據條件選擇性地包含或排除程式碼的技術。這種技術允許程式設計師根據不同的條件編譯不同的程式碼塊,從而實現跨平台兼容性、調試模式等功能。

條件編譯通常使用前置處理器指令來實現,前置處理器指令以#開頭,例如#ifdef、#ifndef、#if等。下面是一些常見的條件編譯指令及其含義:

#ifdef:如果定義了指定的巨集,則編譯下面的程式碼塊。 #ifndef:如果未定義指定的巨集,則編譯下面的程式碼塊。 #if:如果條件表達式為真,則編譯下面的程式碼塊。 #else:如果上一個條件不成立,則編譯下面的程式碼塊。 #elif:如果上一個條件不成立,且當前條件為真,則編譯下面的程式碼塊。 #endif:結束條件編譯的程式碼塊。

以上都了解的話,看 code 就沒問題了!哈!

示範

以下示範如何在前置處理器 加入自己的指令,及在 IDE 中的樣子,還有最後 的執行結果。

首先,在專案屬性頁中 組態 Debug: C/C++ -> 前置處理器 -> 前置處理器定義,加入

TEST_DEBUG

Desktop View

再來,在專案屬性頁中 組態 Release: C/C++ -> 前置處理器 -> 前置處理器定義,加入

TEST_RELEASE

Desktop View

切成 Debug

Desktop View

執行結果, 只會呼叫到 TEST_DEBUG 中的程式片段執行結果

Desktop View

切成 Release

Desktop View

執行結果, 只會呼叫到 TEST_RELEASE 中的程式片段

Desktop View

完整 code 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>

#ifdef TEST_DEBUG
const char* getMode()
{
    return "I am in Debug configuration";
}
#endif


#ifdef TEST_RELEASE
const char* getMode()
{
    return "I am in Release configuration";
}
#endif


int main()
{
    std::cout << "Hello World!\n\n";

    std::cout << getMode() << std::endl;
}

結束,這樣應該很清楚了吧!可以繼續 happy coding 了!㋡

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍