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?
由於fprintf繼承的膨脹,我想用vfprintf(FILE * stream, const char * format, va_list arg)
替換fprintf(stderr, "Error occured with file %s\n", file);
中的fprintf調用。 是否可以使用vfprintf而無需爲此編寫包裝函數以某種方式創建va_list參數?使用沒有包裝函數的vfprintf?
從上面的評論,聽起來像你實際上想要完全避免printf
功能家族。
在這種情況下,你可以使用的東西沿着這些路線:
fputs("Error occured with file ", stderr);
fputs(file, stderr);
fputc('\n', stderr);
'fprintf'本身就是一個非常薄的vfprintf'的'包裝內,以便 「是繼承fprintf中臃腫」,實際上是一個vfprintf。否則,你需要解釋你認爲的膨脹是什麼。 –
我不知道,謝謝。我將代碼與dietlibc鏈接起來,它在編譯printf膨脹時會發出警告:'/opt/diet/lib-x86_64/libc.a(vfprintf.o):在函數\'vfprintf'中:(.text + 0x2e ):警告:警告:printf函數會添加幾千字節的膨脹。「有什麼解決方案可以減少膨脹並且沒有警告? – thpetrus
被引用的「膨脹」來自整個printf家族,包括'vfprintf'。唯一的方法是避免使用字符串格式化函數。 – duskwuff