16

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

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

4

3 回答 3

22

在 C 和 C++ 中,宏不(在大多数情况下)使用实际代码的任何知识进行评估,而是在代码之前处理(因此称为“预处理器”)。因此,__FILE__将评估为“file.h”,并将评估为与file.h 中出现__LINE__的行相对应的行号。SYSTEM_FAILURE

于 2012-06-26T19:07:13.193 回答
7

由于宏在编译之前被它们的定义替换,因此__LINE__将包含您使用宏的文件的实际行。内联完全不会影响这种行为。

于 2012-06-26T19:06:29.930 回答
6

__LINE__将是头文件的行,因为预处理器会在编译器看到它之前评估它。

于 2012-06-26T19:06:52.717 回答