2017-02-01 80 views

回答

6

不活動的預處理器塊是由於預處理器指令而停用的代碼塊。最簡單的例子是:

#if 0 
//everytyhing here is inactive and will be ignored during compilation 
#endif 

更常見的例子是

#ifdef SOME_VAR 
// code 
#else 
// other code 
#endif 

在這種情況下,第一或第二個代碼塊將根據SOME_VAR是否被定義爲無效。

+0

我知道了,謝謝你這麼多 –

1

請檢查這個假設的例子來闡述你的問題。

#include <iostream> 
#include <windef.h> 

#define _WIN32 

int add(int n1, int n2){return n1 + n2;} 

LONGLONG add(LONGLONG n1, LONGLONG n2){return n1 + n2;} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
#ifdef _WIN32 
    int val = add(10, 12); 
#else 
    LONGLONG = add(100L, 120L);//Inactive code 
#endif // _WIN32 
    return 0; 
} 

您可以看到_WIN32被定義爲#else預處理器指令中的代碼被禁用並且不會被編譯。您可以取消定義_WIN32以查看反向操作。請參閱附加的MS Visual Studio屏幕截圖。紅色的行是禁用的代碼。

enter image description here

希望這會有所幫助。

1

預處理程序是程序翻譯的最早階段之一。它可以在編譯階段開始之前修改程序的源代碼。通過這種方式,您可以根據各種約束將源配置爲不同的構建方式。預處理條件塊

用途包括:

  1. 完全註釋代碼:

    #if 0 
    // The code here is never compiled. It's "commented" away 
    #endif 
    
  2. 基於各種約束提供不同的實施方式中,像洗車臺

    #if defined(WIN32) 
        //Implement widget with Win32Api 
    
    #elif defined(MOTIF) 
        // Implement widget with Motif framework 
    
    #else 
        #error "Unknown platform" 
    #endif 
    
  3. 有無像這樣的宏表現在不同的方式。

  4. 確保有效的抽象定義適當:

    #if PLATFORM_A 
        typedef long int32_t; 
    #elif PLATFORM_B 
        typedef int int32_t;