2010-12-07 26 views
0

我很難從大型C++代碼項目中的選定位置打印到文本文件。將許多函數的C++ fprintf複製到單個文本文件中

使用C++我正在使用函數X,它被稱爲多次。

這是從功能Y

我想輸出的功能X到一個文本文件中的結果,並已通過汽車無使用聲明的fopen,fprintf中進行所謂的,FCLOSE設定的功能 - 這工作 - 儘管非常緩慢。

但是,我只希望從主機功能Y的特定區域調用X時將結果打印到文件。

我正在尋找這樣做,whilist與當前代碼微創(即我不想添加另一個參數功能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 
    } 
} 
+2

發佈代碼示例。 – Puppy 2010-12-07 16:53:45

回答

0

無論你做什麼。它可能在邏輯上等同於聲明一個全局變量。但是你可以用各種方式緩解這種痛苦:
如果X是一個類成員,你可以聲明該變量爲X類的靜態成員。
如果X屬於一個名稱空間,那麼您的全局變量可以屬於該名稱空間。
您可以將它聲明爲X的源文件的本地靜態變量,並使用源文件中的函數來設置其值。 依此類推。

1

既然你用C是++,你可以添加一個X的重載,該重載需要一個參數來表示何時執行它,而不必更改任何調用者。

你有

void X(args); 

添加

void X(args, bool doIt); 

然後,在原來的X移動代碼到新的,檢查doIt方法。

在原來的X,叫X(args, false)

不知是否實際登錄將被傳遞布爾狀態。選擇是:參數,全局變量,成員變量(靜態或實例),線程局部變量或文件。

0

如果您不想保持二進制符合性,也可以將X函數轉換爲帶有重載運算符()的結構/類 - 然後添加字段或方法specyfying如果您應該打印它。 - 但是這與另一個全局變量非常相似。除了重載X之外,我懷疑有沒有其他方法不使用全局變量或類似的東西。

你如何保持你的FILE *指針在X個調用之間?全球? stativ變量的功能?

+0

每次調用該函數時,都會聲明,打開和關閉FILE *指針。由於fopen(「a」)結果被附加到單個文件的末尾。我這樣做會受到很大的懲罰。 – swarm999 2010-12-07 17:12:57

相關問題