带有可选参数的 C++ 和 MSVC #define 指令

C++ and MSVC #define directive with optional arguments

我在尝试让我编写的宏正常运行时遇到问题。我已经阅读了文档,但无法在网上找到任何可以帮助我查找的内容。

我正在尝试编写一个用于信息和调试目的的宏。确切的宏应该如下所示:

INFODUMP("Some format string here with a variable %f", someVariableInCode);

这将扩展为:

std::printf("INFO: Some format string here with a variable %f\n" someVariableInCode);

我写的不能正常运行的宏是:

#define INFODUMP(s, ...) std::printf("INFO: %s\n", s, __VA_ARGS__)

虽然从技术上讲,此宏可以正常运行,但它不会执行 格式设置。

比如我有:

INFODUMP("Size of width buffer: %i, size of height buffer: %i", wCells.size(), hCells.size());

当程序为 运行 时,在控制台中,我得到:

INFO: Size of width buffer: %i, size of height buffer: %i

所以宏 有效 ,它只是没有格式化字符串。这有点像用 s 正确格式化它,但之后没有任何可选参数。

如果我不得不猜测的话,它与字符串以及它们在运行时的格式化方式有关。如果是这样的话,我仍然完全不知道要查找什么。

备注:

那不是 printf() 的工作方式。

您的宏展开:

INFODUMP("%d", 42);

收件人:

std::printf("INFO: %s\n", "%d", 42)

你需要:

 #define INFODUMP(s, ...) std::printf("INFO: " ## s ## "\n", __VA_ARGS__)

然后将展开:

INFODUMP("%d", 42);

收件人:

std::printf("INFO: %d\n", 42)