在C中轉(zhuǎn)發(fā)對變量函數(shù)的調(diào)用在C中,是否可以轉(zhuǎn)發(fā)變量函數(shù)的調(diào)用?就像在,int my_printf(char *fmt, ...) {
fprintf(stderr, "Calling printf with fmt %s", fmt);
return SOMEHOW_INVOKE_LIBC_PRINTF;}在這種情況下,以上述方式轉(zhuǎn)發(fā)調(diào)用顯然不是必要的(因為您可以其他方式記錄調(diào)用,也可以使用vfprintf),但是我正在處理的代碼庫要求包裝器執(zhí)行一些實際的工作,并且沒有(也不能添加)類似于vfprintf的助手函數(shù)。[最新情況:根據(jù)迄今提供的答案,似乎有些混亂。用另一種方式來表達這個問題:一般來說,你能把一些任意的變量函數(shù)包裝起來嗎?而不修改該函數(shù)的定義.]
3 回答

白豬掌柜的
TA貢獻1893條經(jīng)驗 獲得超10個贊
varargs
printf
/vprintf
#include <stdarg.h>int m_printf(char *fmt, ...){ int ret; /* Declare a va_list type variable */ va_list myargs; /* Initialise the va_list variable with the ... after fmt */ va_start(myargs, fmt); /* Forward the '...' to vprintf */ ret = vprintf(fmt, myargs); /* Clean up the va_list */ va_end(myargs); return ret;}

郎朗坤
TA貢獻1921條經(jīng)驗 獲得超9個贊
#define my_printf(format, ...) \ do { \ fprintf(stderr, "Calling printf with fmt %s\n", format); \ some_other_variadac_function(format, ##__VA_ARGS__); \ } while(0)
- 3 回答
- 0 關注
- 330 瀏覽
添加回答
舉報
0/150
提交
取消