C ++ fprintf将许多函数转换为单个文本文件

时间:2010-12-07 16:49:53

标签: c++ file-io

我很难从大型C ++代码项目中的选定位置打印到文本文件。

使用C++我正在使用多次调用的函数X

这是从函数Y

调用的

我希望将函数X的结果输出到单个文本文件,并通过不断使用声明,fopen,fprintf,fclose函数集来完成 - 这很有效 - 尽管速度很慢。

但是,我只希望在从主机函数X的特定区域调用Y时将结果打印到文件。

我希望这样做,使用当前代码进行微创(即我不想在函数X中添加另一个参数,我也不想声明全局变量)。

这是一种独特的方法,可以有效地“告诉”代码和子函数何时开始打印到文件以及何时停止。

(p.s。我已经使用VBA对我的结果进行了后处理,但是这种解决方法效率很低)。

欢迎任何想法或代码构造!

以下是子功能X:

void `X`() {    
    FILE *f2 = NULL;     
    f2 = fopen("log.txt", "a");     
    // Calculate a result: `result`    
    fprintf(f2, "%.4e   ", result);    
    fclose (f2);
}

以下是主要的通话功能Y:

void Y Y(){    
    for i=1:100{    
        X();      
        X();      
        X(); // <-- Wishing to print only this line to a text file
    }
}

3 个答案:

答案 0 :(得分:1)

由于你使用的是C ++,你可以添加一个X的重载,它接受何时执行的参数,而不必更改任何调用者。

你有

  void X(args);

添加

  void X(args, bool doIt);

然后,将原始X中的代码移动到新的代码,检查doIt。

在原始X中,请致电X(args, false)

不知何故必须传递是否实际登录的布尔状态。选项包括:参数,全局变量,成员变量(静态或实例),线程局部变量或文件。

答案 1 :(得分:0)

无论你做什么。它可能在逻辑上等同于声明一个全局变量。但是你可以通过各种方式缓解这种痛苦:
如果X是类成员,则可以将变量声明为X类的静态成员 如果X属于命名空间,则您的全局变量可以属于该命名空间 您可以将其声明为X的源文件本地的静态变量,并使用源文件中的函数来设置其值。 等等。

答案 2 :(得分:0)

如果您不想保持二进制合规性,那么您也可以使用重载的operator()将X函数转换为结构/类 - 然后添加字段或方法specyfying(如果您应该打印它)。 - 但这与另一个全局变量非常相似。除了重载X,我怀疑还有其他方法不使用全局或类似的东西。

你如何在X调用之间保留你的FILE *指针?全球?函数中的stativ变量?