第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C中轉(zhuǎn)發(fā)對變量函數(shù)的調(diào)用

在C中轉(zhuǎn)發(fā)對變量函數(shù)的調(diào)用

C++
肥皂起泡泡 2019-08-03 03:03:29
在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個贊

不是直接的,但是,在標準庫中,變量函數(shù)以成對的形式出現(xiàn)在標準庫中是很常見的(在標準庫中,這幾乎是普遍的情況)。varargs風格替代功能。G.printf/vprintf

那個V.。函數(shù)采用va_list參數(shù),其實現(xiàn)通常使用編譯器特定的“宏魔術”,但您可以保證調(diào)用v.像這樣的變量函數(shù)的樣式函數(shù)可以工作:

#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;}

這應該會給你想要的效果。

如果考慮編寫各種庫函數(shù),還應該考慮將va_List樣式的伙伴作為庫的一部分。正如您可以從您的問題中看到的,它可以證明對您的用戶是有用的。



查看完整回答
反對 回復 2019-08-04
?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

C99支架帶有各種參數(shù)的宏;根據(jù)編譯器的不同,您可能可以聲明一個宏來執(zhí)行您想要的操作:

#define my_printf(format, ...) \    do { \
        fprintf(stderr, "Calling printf with fmt %s\n", format); \
        some_other_variadac_function(format, ##__VA_ARGS__); \
    } while(0)

不過,一般來說,最好的解決方案是使用Va列表您試圖包裝的函數(shù)的形式,如果存在的話。



查看完整回答
反對 回復 2019-08-04
  • 3 回答
  • 0 關注
  • 330 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號