c++类:
#include <stdio.h>
class Trace
{
public:
Trace() {noisy = 0; f=stdout; }
Trace (FILE* ff) {noisy = 0;f = ff; }
void print(char* s)
{
fprintf(f,"%s",s);
}
void on() { noisy = 1; }
void off() { noisy =0; }
private:
int noisy;
FILE* F;
};
int main()
{
Trace t(stderr);
t.print("begin main()\n");
t.print("end main()\n");
}
C:
#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函数与C++类的比较,C语言提现3个缺点:
1、函数trace不是内联的,因此即使当跟踪关闭时,它还保持着函数调用的开销,在很多C的实现中,这个额外负担是无法避免的;
2、C版本引入了3个全局名字:trace、trace_on和trace_off,而C++只引入了一个。
3、C版本很难将这个例子一般化,使之能输出到一个以上的文件中,