使用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++版本都要颇费些精力。
原文链接: https://www.cnblogs.com/chessyoung/archive/2011/08/21/2147929.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/30947
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!