c++ - 调试宏中的字符串变量扩展

标签 c++ c macros

我正在尝试在 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/

相关文章:

c++ - 类成员变量的不定数量(C++)

c++ - 用 FFMPEG 解码 pcm_s16le?

c++ - Cortex A9 NEON 与 VFP 使用混淆

c - Contiki 中是否有类似于 time.h 中的 clock_gettime() 的函数?

C++ 模板和预处理宏

c++ - 在 iPhone 项目中包含 C++ 代码时出现编译器错误

c++ - 用于显示字符串 | 的每个字符的 for 循环C++

C - 汉诺塔 - 使用数组显示算法每次迭代的每个 Hook 的内容

javascript - Sweet.js - 可以在多个文件中使用宏吗?

c - 在编译 C 程序之前如何检查库是否可用