隐式传递参数

Wil*_*ter 3 c

我正在开发一个自定义单元测试框架,该框架不会显示失败测试的文件名/行号。我知道我可以要求它们作为函数的参数,report_results但这似乎很多文本。

有没有一种方法来让这个__FILE____LINE__总是与功能过去了,即使我没有通过他们,当我打电话了吗?

您可以在C ++中执行以下操作:

void func(char *file=__FILE__, int line=__LINE__)(int more_args) {}
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 6

在代码中使用宏来调用基础函数

#define func(arg) real_func(__FILE__,__LINE__,arg)
Run Code Online (Sandbox Code Playgroud)

这里real_func

void real_func(const char *file, int line, int arg);
Run Code Online (Sandbox Code Playgroud)

在您的代码中,当您调用时func(12),它将扩展为对的调用real_func,并带有实际的文件路径和行。您甚至可以在C99中使用可变参数宏作为前端来支持可变参数函数。

  • *您甚至可以在C99中使用可变参数宏作为前端来支持可变参数函数。*并且,如果您使用古老的编译器,则必须在不使用C99可变参数宏的情况下支持可变参数函数-给定记录功能` LOG(const char * fmt,...)`,将`LOG`宏扩展为`log_step_one(__ FILE__,__LINE __)`,并让`log_step_one()`返回指向log_step_two(const char * fmt,。 ..)`。`log_step_one()`保存参数,`log_step_two()`检索参数。 (2认同)