设为首页 加入收藏

TOP

0.2 不用类来实现
2013-10-07 00:07:09 来源: 作者: 【 】 浏览:59
Tags:0.2 不用 实现

0.2  不用类来实现

此时,我又开始想,对于这个问题,典型的C解决方案会是怎样的。它可能会从一个类似于函数trace()(而不是类)的东西开始:

#include <stdio.h>
void trace(char *s)
{
printf("%s\n", s);
}

它还可能允许我以如下形式控制输出:

#include <stdio.h>
static int noisy = 1;
void trace(char *s)
{
if(noisy)
printf("%s\n", s);
}
void trace_on() { noisy = 1; }
void trace_off() { noisy = 0; }

这个方法是有效的,但与C++(www.cppentry.com)方法比较起来有3个明显的缺点。

首先,函数trace不是内联的,因此即使当跟踪关闭时,它还保持着函数调用的开销 。在很多C的实现中,这个额外负担都是无法避免的。

第二,C版本引入了3个全局名字:trace、trace_on和trace_off,而C++(www.cppentry.com)只引入了1个。

第三,也是最重要的一点,我们很难将这个例子一般化,使之能输出到一个以上的文件中。为什么呢?考虑一下我们会怎样使用这个trace函数:

int main()
{
trace("begin main()\n");
// main 函数主体
trace("end main()\n");
}

采用C++(www.cppentry.com),可以只在创建Trace对象时一次性指定文件名。而在C版本中,情况相反,没有合适的位置指定文件名。一个显而易见的办法就是给函数trace增加一个参数,但是需要找到所有对trace函数的调用,并插入这个新增的参数。另一种办法是引入名为trace_out的第4个函数,用来将跟踪输出转向到其他文件。这当然也得要求判断和记录跟踪输出是打开还是关闭。考虑一下,譬如,main调用的一个函数恰好利用了trace_out向另一个文件输出,则何时切换输出的开关状态呢?显然,要想使结果正确需要花费相当的精力。


回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇0.4 一个更大的例子 下一篇0.1 第一次尝试

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: