定义 printf 的宏时__LINE__宏不起作用

__LINE__ macro not working when define printf's macro

本文关键字:LINE 不起作用 printf 定义      更新时间:2023-10-16

LINE宏给出随机数,FILE当"printf"是用另一个宏定义时,宏给出null。在下面的代码中,我展示了用于"printf"的宏和函数(这是一个类的方法(,其中使用了宏:

#define OTConsolePrint(x) printf(x)

void parseArray(float* arr)
{
    if (arr == NULL)
    {
        printf("Line: %dn", __LINE__);
        OTConsolePrint("Null pointer at nLine: %dnFile: %sn", __LINE__, __FILE__);
    }
}

给我:

Line: 39
Null pointer at
Line: 1964696
File: (null)
#define OTConsolePrint(x, y, z) printf(x, y, z)

当您调用函数中的宏时,您将传递三个元素。

您的">宏函数"只接受一个参数:

#define OTConsolePrint(x) printf(x)

相反,你可以用不止一个参数来称呼它:

OTConsolePrint("Null pointer at nLine: %dnFile: %sn", __LINE__, __FILE__);

事实上,我甚至不认为它能编译。


无论如何,为了有可变参数,你可以做:

#define OTConsolePrint(STR, ...) printf(STR, __VA_ARGS__)

它按预期工作。