访问宏中的变量值

Aze*_*rah 12 c++ macros

前段时间,我为c和c ++程序制作了这个漂亮的断言宏

#define ASSERT(truthy, message) \
     if (!(truthy)) \
     {\
         cout << message << " on line " << __LINE__ << " in file " << __FILE__ << ". Check was " << #truthy << endl;\
     }
Run Code Online (Sandbox Code Playgroud)

Scatter ASSERT调用整个代码,只要truthy值不真实,它就会发出警告!在开发过程中非常方便,以提醒您潜在的错误.

ASSERT(filesFound > 0, "Couldn't find any files, check your path!");
Run Code Online (Sandbox Code Playgroud)

当filesFound为0时,宏将打印出来

找不到任何文件,检查你的路径!在文件openFiles.c的第27行.检查是filesFound> 0

现在,我希望它打印,给我更多相关信息,是传递给truthy参数的任何变量的值.像这样

找不到任何文件,检查你的路径!在文件openFiles.c的第27行.检查是filesFound> 0,filesFound是0

我想知道,这似乎是类似lisp的领域,是否有任何黑魔法预处理可用于评估变量和函数的值,而无需评估truthy语句?

我假设很失望.

Ser*_*sta 0

我无法想象有什么方法可以做到这一点......除了传递另一个参数

#define ASSERT_PARAM(truthy, message, param) \
     if (!(truthy)) \
     {\
         cout << message << " on line " << __LINE__ << " in file " << __FILE__ << ". Check was " << #truthy  << ", value was " << param << endl;\
     }
Run Code Online (Sandbox Code Playgroud)

你会这样使用它:

ASSERT_PARAM(filesFound > 0, "Couldn't find any files, check your path!", filesFound);
Run Code Online (Sandbox Code Playgroud)

得到:

Couldn't find any files, check your path! on line 27 in file openFiles.c. Check was filesFound > 0, value was 0
Run Code Online (Sandbox Code Playgroud)