2011-09-16 90 views
0

由於fprintf繼承的膨脹,我想用vfprintf(FILE * stream, const char * format, va_list arg)替換fprintf(stderr, "Error occured with file %s\n", file);中的fprintf調用。 是否可以使用vfprintf而無需爲此編寫包裝函數以某種方式創建va_list參數?使用沒有包裝函數的vfprintf?

+2

'fprintf'本身就是一個非常薄的vfprintf'的'包裝內,以便 「是繼承fprintf中臃腫」,實際上是一個vfprintf。否則,你需要解釋你認爲的膨脹是什麼。 –

+0

我不知道,謝謝。我將代碼與dietlibc鏈接起來,它在編譯printf膨脹時會發出警告:'/opt/diet/lib-x86_64/libc.a(vfprintf.o):在函數\'vfprintf'中:(.text + 0x2e ):警告:警告:printf函數會添加幾千字節的膨脹。「有什麼解決方案可以減少膨脹並且沒有警告? – thpetrus

+0

被引用的「膨脹」來自整個printf家族,包括'vfprintf'。唯一的方法是避免使用字符串格式化函數。 – duskwuff

回答

0

從上面的評論,聽起來像你實際上想要完全避免printf功能家族。

在這種情況下,你可以使用的東西沿着這些路線:

fputs("Error occured with file ", stderr); 
fputs(file, stderr); 
fputc('\n', stderr);