日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > C技巧:結構體參數轉成不定參數

C技巧:結構體參數轉成不定參數

來源:程序員人生   發布時間:2014-03-14 21:20:14 閱讀次數:2844次
下面這段程序是一個C語言的小技巧,其展示了如何把一個參數為結構體的函數轉成一個可變參數的函數,其中用到了宏和內建宏“__VA_ARGS__”,下面這段程序可以在GCC下正常編譯通過:

#include <stdio.h>

#define func(...) myfunc((struct mystru){__VA_ARGS__})

struct mystru { const char *name; int number; };

void myfunc(struct mystru ms )
{
printf("%s: %d", ms.name ?: "untitled", ms.number);
}

int main(int argc, char **argv)
{
func("three", 3);
func("hello");
func(.name = "zero");
func(.number = argc, .name = "argc",);
func(.number = 42);
return 0;
}
從上面這段程序,我們可以看到一個叫 myfunc的函數,被func的宏改變了,本來myfunc需要的是一個叫mystru的結構,然而通過宏,我們把struct mystru的這個參數,變成了不定參數列表的一個函數。上面這段程序輸出入下,

three: 3
hello: 0
zero: 0
argc: 1
untitled: 42

雖然,這樣的用法并不好,但是你可以從另外一個方面了解一下這世上對C稀奇古怪的用法。 如果你把宏展開后,你就明的為什么了。下面是宏展開的樣子:

myfunc((struct mystru){"three", 3});
myfunc((struct mystru){"hello"});
myfunc((struct mystru){.name = "zero"});
myfunc((struct mystru){.number = argc, .name = "argc",});
myfunc((struct mystru){.number = 42});
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美视频网址 | 国产在线视频网站 | 91精品久久久久久久久久入口 | 日韩毛片免费视频一级特黄 | 国产天堂| 99久久精品国产毛片 | 午夜欧美一区二区三区在线播放 | 一区二区在线视频观看 | 国产精品国产精品 | 99精品国产高清一区二区麻豆 | 久久久久久成人 | 毛片一| 国产精品综合一区二区 | 国产精品久久久久免费视频 | 久久人人爽亚洲精品天堂 | 国产精品一区视频 | 警花av一区二区三区 | 国产在线精品成人免费怡红院 | 久久久久毛片 | 国内精品视频 | 欧美精品国产精品 | 久久精品视频网站 | 国产精品大全 | 成人毛片网 | 在线看的毛片 | 欧美日韩一区二区三区不卡 | 日韩欧美电影在线观看 | 国产精品大全 | 亚洲一区二区三区中文字幕 | 久久精品在线 | 精品国产一区二区三区四区在线观看 | 不卡一区二区三区四区 | 不卡视频在线 | 麻豆国产在线 | 日本黄色网址大全 | 欧美不卡视频 | 欧美一区二区不卡视频 | 亚洲 自拍 另类 欧美 丝袜 | 成人免费乱码大片a毛片软件 | www.av视频在线观看 | 综合久久av |