有没有比在C中使用#ifdef更简单的方法?

Joh*_*ker 1 c debugging assertions

根据我的理解断言是C中的一个宏,并且如果你在编译时使用它但是禁用它,那么就不会有开销(这可能不正确我不知道).对我来说问题是,我想要做的是将所有变量传递给我的函数并打印输出,但仅限于我想要启用调试.这是我到目前为止:

int exampleFunction (int a, int b)
{
  #ifdef debugmode
  printf("a = %i, b = %i", a, b);
  #endif 
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更容易(并且不那么难看)的方法来做这样的事情.xdebug for php有这个功能,我发现在调试时节省了大量的时间,所以我想为每个功能做这件事.

谢谢

edu*_*ffy 11

试试这个:

#ifdef debugmode
#define DEBUG(cmd) cmd
#else
#define DEBUG(cmd)
#endif


DEBUG(printf("a = %i, b = %i", a, b));
Run Code Online (Sandbox Code Playgroud)

现在,如果您已debugmode定义,则会获得print语句.否则,它永远不会出现在二进制文件中.

  • @Kai - 当debugmode未定义时,没有无用的函数调用.预处理器只用分号替换printf,然后在可执行文件中将其转换为空. (3认同)