我很难从大型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
}
}
答案 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变量?