簡體   English   中英

#ifndef _Python_CALL 在 C++ 代碼中是什么意思?

[英]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”。 這會跳過嗎?

#ifndef#ifdef相反。

在你的情況下, #ifdef是真的,所以它跳轉到直接return 0並省略#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM