我發現了一些代碼行,這些代碼行在C的源代碼的預處理器塊中變暗。我的編譯器MS Visual Studio將其命名爲「不活動的預處理器塊」。這是什麼意思,我的編譯將不考慮這些代碼行, 以及如何使其成爲活動塊?C中「inactive」預處理器塊的含義是什麼?
3
A
回答
6
不活動的預處理器塊是由於預處理器指令而停用的代碼塊。最簡單的例子是:
#if 0
//everytyhing here is inactive and will be ignored during compilation
#endif
更常見的例子是
#ifdef SOME_VAR
// code
#else
// other code
#endif
在這種情況下,第一或第二個代碼塊將根據SOME_VAR
是否被定義爲無效。
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屏幕截圖。紅色的行是禁用的代碼。
希望這會有所幫助。
1
預處理程序是程序翻譯的最早階段之一。它可以在編譯階段開始之前修改程序的源代碼。通過這種方式,您可以根據各種約束將源配置爲不同的構建方式。預處理條件塊
用途包括:
完全註釋代碼:
#if 0 // The code here is never compiled. It's "commented" away #endif
基於各種約束提供不同的實施方式中,像洗車臺
#if defined(WIN32) //Implement widget with Win32Api #elif defined(MOTIF) // Implement widget with Motif framework #else #error "Unknown platform" #endif
有無像這樣的宏表現在不同的方式。
確保有效的抽象定義適當:
#if PLATFORM_A typedef long int32_t; #elif PLATFORM_B typedef int int32_t;
相關問題
- 1. C預處理程序中__real__的含義是什麼?
- 2. 信號處理的含義是什麼?
- 3. C++定義預處理器
- 4. C++預處理器定義
- 5. ##對於C(C++)預處理器有什麼意義?
- 6. C++預處理器輸出中的<built-in>是什麼?
- 7. 什麼是__DARWIN_C_LEVEL C預處理符號?
- 8. 用TeamCity定義預處理器的最佳方法是什麼?
- 9. Handlebars中{{#_}} ... {{/ _}}塊的含義是什麼?
- 10. 什麼是一個容易破解的C預處理器?
- 11. 什麼是python的字符串化C預處理器宏#
- 12. C預處理器#define聲明的變量是什麼類型?
- 13. 如何查找包含文件的C預處理器定義?
- 14. C/C++預處理歧義
- 15. EntityFramework中代理的含義是什麼?
- 16. C++預處理器
- 17. C中「wild pointer」的含義是什麼?
- 18. C#中「@」的含義是什麼
- 19. C++中[=](...){...}的含義是什麼?
- 20. :: C++中的含義是什麼?
- 21. 「var」在C#中的含義是什麼?
- 22. C#中'this'的含義是什麼?
- 23. C#中「=>」的含義是什麼?
- 24. C++宏中「##」的含義是什麼?
- 25. 「System.IO」在C#中的含義是什麼?
- 26. C++中NULL!= value的含義是什麼?
- 27. C中'=='的含義是什麼?
- 28. PLAT_BINARYFORMATTER在C#中的含義是什麼?
- 29. 處理程序在django-achievement文檔中的含義是什麼?
- 30. %〜d0在Windows批處理文件中的含義是什麼?
我知道了,謝謝你這麼多 –