2012-08-17 59 views
5

我有一個函數需要能夠寫入標準輸出或文件,具體取決於用戶想要的內容。它默認爲標準輸出。要做到這一點,我做了以下(減去錯誤檢查等):設置FILE *等於stdout是否便攜?

FILE* out; 
if (writeToFile) { /*Code to open file*/; } 

else 
    out = stdout; 

// ...rest of the function goes here 

if (out != stdout) 
    fclose(out); 

這肯定是卓有成效的,但我不知道它是如何攜帶。如果不是,或者還有其他問題,我該怎麼辦?

回答

8

是的,它是便攜式的,並且沒問題,前提是您不要混淆*stdout的低級別實現(例如,通過在Posix上調用close(fileno(stdout))或使用dup)。

1

它應該沒問題。如果您將指針在DLL的邊界之間來回傳遞(即DLL外部的C代碼將指針傳遞到stdout指向DLL內部的C代碼),您可能會遇到麻煩,但除此之外,它應該是可移植的。