[英]What does #ifndef _Python_CALL mean in a C++ code?
我正在調試包含與 Python 相關的內容的 C++ 代碼。 在 function 中:
void normalize(string &text) {
...
#ifdef _Python_CALL
newContentStr = contentStr;
#endif
#ifndef _Python_CALL
...
...
#endif
return 0;
}
我正在使用 GDB 來跟蹤代碼邏輯,我發現到達該行后:
newContentStr = contentStr;
然后直接跳轉到function的最后一行:
return 0;
為什么下面之間的代碼被跳過了?
#ifndef _Python_CALL
...
...
#endif
另請注意,第一個是“#ifdef”,第二個是“#ifndef”。 這會跳過嗎?
從您顯示的代碼片段來看, _Python_CALL
是一個宏名稱,可能通過#define _Python_CALL
在某處定義(或者可能通過其他方式,例如在編譯期間使用 C++ 編譯器的命令行參數)。
然后, #ifdef _Python_CALL
行意味着當且僅當宏名稱_Python_CALL
被定義( #ifdef
表示“如果定義”)時,在它之后的所有內容直到#endif
行將被編譯(並因此在編譯的程序中執行)。 由於您聲稱該行newContentStr = contentStr;
執行后,我們可以假設宏名_Python_CALL
確實是在編譯期間定義的。
現在, #ifndef _Python_CALL
行意味着當且僅當宏名稱_Python_CALL
未定義時,直到#endif
行之前的所有內容都將被編譯(並執行)。 (注意#ifndef
中的n ,它的意思是“如果未定義”)。 但是,正如我們已經知道的(從我們在上一段中得出的結論),情況並非如此,因為確實定義了_Python_CALL
。 因此,該塊將不會被編譯/執行。
在 Cppreference 上,您可以閱讀有關 C++預處理器的更多信息,尤其是有關#define
和#ifdef
/ #ifndef
指令的信息,以獲得更深入的了解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.