簡體   English   中英

_LINE__在內聯函數中的行為

[英]Behavior of __LINE__ in inline functions

我有一個宏將行號和文件名傳遞給錯誤處理程序:

#define SYSTEM_FAILURE (error_code, comment) \
   System_Failure((error_code), (comment), __LINE__, __FILE__);

在內聯函數中使用時,如何解析__LINE__

file.h:
inline int divide(int x, int y)
{
    if (y == 0)
    {
        SYSTEM_FAILURE(ENUM_DIVIDE_BY_ZERO, "divide by zero error");
    }
    return x/y;
}

__LINE__包含頭文件中的行號,或者調用內聯函數的源文件的行號(假設編譯器在源代碼中執行“粘貼”)?

在C和C ++中,宏(大多數情況下)不是用實際代碼的任何知識進行評估,而是在代碼之前處理(因此稱為“預處理器”)。 因此, __FILE__將計算為“file.h”,並且__LINE__將計算為與file.h中出現SYSTEM_FAILURE的行對應的行號。

由於宏在編譯之前被其定義替換,因此__LINE__將包含您在其中使用宏的文件的實際行。 內聯不會影響這種行為。

__LINE__將是頭文件的行,因為預處理器將在編譯器看到它之前對其進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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