如何封裝帶有不變引數的函式

2021-09-27 09:24:41 字數 580 閱讀 3140

一直都想對printf就行封裝,printf的函式宣告為:

int printf(char *format, ...);
構想定義乙個函式:

int myprintf(char* format, ...)

查了很久, 都只有通過巨集定義來實現這種需求。

例如:

#define writetologerr(format, ...)  printf(format, ##__va_args__);
今天,在查資料的時候,發現了vprintf函式。

它的函式宣告為:

int vprintf(char *format, va_list param);
據說printf也是通過它實現的。

vprintf就可以實現我的需求:

myprint的實現為:

int myprint(char* format, ...)

使用va_start、va_end函式需要包含標頭檔案cstdarg。

函式帶有引數

函式的引數 前面介紹的main函式都是不帶引數的。因此main 後的括號都是空括號。實際上,main函式可以帶引數,這個引數可以認為是 main函式的形式引數。語言規定main函式的引數只能有兩個,習慣上這兩個引數寫為argc和ar 因此,main函式的函式頭可寫為 main argc,ar 語言還...

帶有模板引數的函式指標

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!如果能定義乙個帶有模板引數的函式指標,例如 template void pf t 它就可以指向任何乙個帶有乙個任何型別引數的函式了。但這種語法不被編譯器支援。可以把這種型別的指標作為乙個普...

setTimeout 傳帶有引數的函式

settimeout getprogress name,type 3000 發現getprogress函式 帶上引數 就失效了,不帶引數可以呼叫又達不到效果 解決辦法 匿名函式包裝 改成如下即可 settimeout function 3000 最近在學習jsonp原理時,遇到乙個settimeou...