我正在尝试在 C 和 C++ 的公共(public)子集中编写一个调试宏。这是我到目前为止想出的:
#define OUTPUT_ERROR(...) printf("%s(%d) : %s() : %s\n", __FILE__, __LINE__, __func__, #__VA_ARGS__)
不幸的是,我不知道如何给它变量来输出。有没有办法强制在运行时扩展变量?例如:
OUTPUT_ERROR("%s was broken", my_var);
或简单地就位
OUTPUT_ERROR(my_var + "some text");
最佳答案
在我看来,您正试图将太多内容塞进一次 printf()
调用中。你不需要那样做。特别是,为了支持您的第一个示例的用法:
OUTPUT_ERROR("%s was broken", my_var);
您可以使用这样的宏轻松地将输出拆分为多个 printf()
调用:
#define OUTPUT_ERROR(...) do { \
printf("%s(%d) : %s() : ", __FILE__, __LINE__, __func__); \
printf(__VA_ARGS__); \
putchar('\n'); \
} while (0)
关于c++ - 调试宏中的字符串变量扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41981928/