在inline函数__LINE__行为(Behavior of __LINE__ in inline

2019-07-30 03:33发布

我有一个传递的行号和文件名错误处理的宏:

#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__包含在头文件中的行号或源文件的行号,其中的内联函数被调用(假定编译器一个在源代码“粘贴”)?

Answer 1:

在C和C ++,宏不是(大部分)与实际的代码的任何知识评估和码(因此命名为“预处理器”)之前被处理。 因此, __FILE__将评估为“file.h”,和__LINE__将评估为对应于在其上行的行号SYSTEM_FAILURE出现在file.h.



Answer 2:

由于宏是由他们的定义编译之前更换, __LINE__将包含在其中使用的宏文件的实际行。 内联将根本不影响此行为。



Answer 3:

__LINE__将是头文件的线以来,预处理器将评估它的编译器永远不会看到它之前。



文章来源: Behavior of __LINE__ in inline functions