C++;将多个函数的fprintf转换为单个文本文件 我在从一个大型C++代码项目中选择的位置打印文本文件时遇到了困难。

C++;将多个函数的fprintf转换为单个文本文件 我在从一个大型C++代码项目中选择的位置打印文本文件时遇到了困难。,c++,file-io,C++,File Io,使用C++我正在使用一个函数X,它被多次调用 这是从函数Y 我希望将函数X的结果输出到一个文本文件中,并通过不断使用声明、fopen、fprintf、fclose函数集来实现这一点——尽管速度非常缓慢 但是,我只希望在从主机函数Y的特定区域调用X时将结果打印到文件中 我希望这样做,因为当前代码的侵入性最小(即,我不想在函数X中添加另一个参数,也不想声明全局变量) 这是一种独特的方法,可以有效地“告诉”代码和子函数何时开始打印到文件以及何时停止 (另外,我已经使用VBA对结果进行了后期处理,但是发

使用
C++
我正在使用一个函数
X
,它被多次调用

这是从函数
Y

我希望将函数
X
的结果输出到一个文本文件中,并通过不断使用声明、fopen、fprintf、fclose函数集来实现这一点——尽管速度非常缓慢

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

我希望这样做,因为当前代码的侵入性最小(即,我不想在函数
X
中添加另一个参数,也不想声明全局变量)

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

(另外,我已经使用VBA对结果进行了后期处理,但是发现这种解决方法效率低下)

任何想法或代码构造都是最受欢迎的

蜂拥

下面是子函数X:

void `X`() {    
    FILE *f2 = NULL;     
    f2 = fopen("log.txt", "a");     
    // Calculate a result: `result`    
    fprintf(f2, "%.4e   ", result);    
    fclose (f2);
}
void Y Y(){    
    for i=1:100{    
        X();      
        X();      
        X(); // <-- Wishing to print only this line to a text file
    }
}
下面是主要的调用函数Y:

void `X`() {    
    FILE *f2 = NULL;     
    f2 = fopen("log.txt", "a");     
    // Calculate a result: `result`    
    fprintf(f2, "%.4e   ", result);    
    fclose (f2);
}
void Y Y(){    
    for i=1:100{    
        X();      
        X();      
        X(); // <-- Wishing to print only this line to a text file
    }
}
void Y(){
对于i=1:100{
X();
X();

(),//p>因为你在C++中,你可以添加一个x的重载,它的参数是什么时候做,而不必改变任何调用方。 你有

  void X(args);

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

在原始X中,调用
X(args,false)


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

无论您做什么。它可能在逻辑上等同于声明全局变量。但您可以通过各种方式减轻这方面的痛苦:
如果X是类成员,则可以将变量声明为X类的静态成员。
如果X属于名称空间,则全局变量可以属于该名称空间。
您可以将其声明为静态变量,位于X的源文件中,并使用源文件中的函数设置其值。
依此类推。

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


如何在X次调用之间保持FILE*指针?函数中的全局?stativ变量?

FILE*指针在每次调用函数时都被声明、打开和关闭。由于fopen(“a”),结果被附加到单个文件的末尾。这样做我会受到很大的惩罚。