通过传递参数开启调试信息这样做好不好?
我linux下编写的c程序要运行在arm中
我想通过在启动的时候是否传入参数来控制是否打印调试信息
我的做法如下:
定义全局变量debug
如果运行程序时参数个数大于1 就将第二个参数赋给debug
程序中的打印信息都使用if(debug)
{
printf("test \n");
}
这样的形式
下面是一个完整的例子:
#include <stdio.h>
int debug = 0;
int main(int argc, char *argv[])
{
printf("Hello World! \n");
if(argc > 1)
debug = argv;
if(debug)
printf("************ \n");
return 0;
}
编译后,输入:/a.out 输出:Hello World!
如果输入:/a.out 1
输出:Hello World!
************
我想问大家,这样做好不好?有什么弊端?
我的另一种方式是在程序中定义一个宏#define DUBUG 1使用如下方式打印调试信息:#if DEBUG
printf("test \n");
#endif这样中的缺点是,需要修改源代码后编译,才可以控制。 个人理解如下:
1 全局变量方式在每次调用的地方都会进行if判断
2 宏方式,在预处理的时候就已经将代码中的DEBUG替换成1了,所以代码在打印的地方只是执行了一条普通的语句。
不知是否正确?
... 你能分清楚宏和变量的区别吗...
你每个printf都写个#if你不累吗?
宏 其实不属于代码的一部分
在对代码进行编译前有预处理,会将程序中所有的宏替换成定义的值
例如#define DEBUG 1那么代码中的:if(DEBUG)就会被写成if(1);
每次都用#if DEBUG的确很烦
其实可以使用宏定义一个自己的print函数,例如dprintf();
大概的代码如下:#define DEBUG
#ifdef DEBUG
#define dprintf(...) printf(...)
#else
#define dprintf(...)
#endif这么写好像有一些问题,有点搞不清楚变长参数。
回复 3# linux_c_py_php
那去学一下vprintf系列函数以及stdarg.h
页:
[1]