C技巧 結構體引數轉成不定引數

2021-06-26 20:31:58 字數 809 閱讀 2447

下面這段程式是乙個c語言的小技巧,其展示了如何把乙個引數為結構體的函式轉成乙個可變引數的函式,其中用到了巨集和內建巨集「__va_args__」,下面這段程式可以在gcc下正常編譯通過:

#include #define func(...) myfunc((struct mystru))

struct mystru ;

void myfunc(struct mystru ms )

int main(int argc, char **argv)

從上面這段程式,我們可以看到乙個叫 myfunc的函式,被func的巨集改變了,本來myfunc需要的是乙個叫mystru的結構,然而通過巨集,我們把struct mystru的這個引數,變成了不定引數列表的乙個函式。上面這段程式輸出入下,

three: 3

hello: 0

zero: 0

argc: 1

untitled: 42

雖然,這樣的用法並不好,但是你可以從另外乙個方面了解一下這世上對c稀奇古怪的用法。 如果你把巨集展開後,你就明的為什麼了。下面是巨集展開的樣子:

myfunc((struct mystru));

myfunc((struct mystru));

myfunc((struct mystru));

myfunc((struct mystru));

myfunc((struct mystru));

原文:

C技巧 結構體引數轉成不定引數

酷殼 下面這段程式是乙個c語言的小技巧,其展示了如何把乙個引數為結構體的函式轉成乙個可變引數的函式,其中用到了巨集和內建巨集 va args 下面這段程式可以在gcc下正常編譯通過 include define func myfunc struct mystru struct mystru void...

C技巧 結構體引數轉成不定引數

下面這段程式是乙個c語言的小技巧,其展示了如何把乙個引數為結構體的函式轉成乙個可變引數的函式,其中用到了巨集和內建巨集 va args 下面這段程式可以在gcc下正常編譯通過 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 include def...

C技巧 結構體引數轉成不定引數

酷殼 下面這段程式是乙個c語言的小技巧,其展示了如何把乙個引數為結構體的函式轉成乙個可變引數的函式,其中用到了巨集和內建巨集 va args 下面這段程式可以在gcc下正常編譯通過 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 include ...