【发布时间】:2018-11-28 15:13:05
【问题描述】:
我有两个宏:
#define LogFunction(str) fprintf(stdout, "%s: %s\n",__FUNCTION__,(str))
#define LogPrintf(f_, ...) fprintf(stdout, (f_), ##__VA_ARGS__)
所以我可以这样使用它们:
void MyFunction()
{
int N=4;
LogFunction("START"); // Outputs "MyFunction: START"
LogPrintf("N=%d\n", N); // Outputs "N=4"
}
我想改变的是
- 在 LogPrintf 的开头添加 FUNCTION,就像在 LogFunction 中一样
- 在LogPrintf末尾加“\n”,不用记得自己放
所以最后我的输出可以只有一个宏。
我试图了解Appending to __VA_ARGS__ 是否有用,但我承认我不明白它是否与我的情况有关:(
谢谢。
【问题讨论】:
-
LogPrintf("N=%d\n")看起来像未定义的行为。4来自哪里? -
让
LogPrintf调用您自己的辅助函数,该函数又调用vprintf。该助手可以在之前和/或之后输出您想要的任何内容。 -
我希望您没有使用
stdout进行实际日志记录。当您需要轮换日志文件或日志文件恰好填满您的文件系统时会发生什么? -
这不是 C++ 代码。
标签: c macros printf variadic-macros