前段时间,我为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语句?
我假设很失望.
我无法想象有什么方法可以做到这一点......除了传递另一个参数
#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)