博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个例子--c++比c做的好

Posted on 2011-08-21 17:07  ChessYoung  阅读(341)  评论(1编辑  收藏  举报

使用c++来实现Trace类,代码如下

#include "stdafx.h"
#include
<iostream>
using namespace std;

class Trace
{
public:
Trace() { noisy
= 0; f = stdout;}
Trace(FILE
*ff) {noisy = 0; f = ff;}
void print(char *s) { if (noisy) { fprintf(f, "%s", s);} }
void on() {noisy = 1;}
void off() {noisy = 0;}
private:
int noisy;
FILE
*f;
};

int _tmain(int argc, _TCHAR* argv[])
{

Trace t(stderr);
t.on();
t.print(
"Begian main()\n");
t.print(
"End main()\n");

return 0;
}

 

使用c解决方案;

static int noisy = 1;
void trace(char *s)
{
if (noisy)
{
printf(
"%s\n", s);
}
}

void trace_on() {noisy = 1;}
void trace_off() {noisy = 0;}

 缺陷:

trace函数不内联,跟踪关闭时,还保持着函数调用开销,效率很低。

c版本引入了3个全局名字,trace, trace_on ,trace_off,c++版本只引入了一个

c版本很难讲这个例子一般化,使之能输出到一个以上的文件中,如果要做到这点,很明显的要再增加一个参数,或者再加一个函数,从开销调用和维护上来说相比c++版本都要颇费些精力。