[英]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.