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

2021-06-22 10:15:19 字數 1540 閱讀 1395

下面這段程式是乙個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

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

structmystru ;

voidmyfunc(structmystru ms )

intmain(intargc,char**argv)

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

three: 3

hello: 0

zero: 0

argc: 1

untitled: 42

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

1

2

3

4

5

myfunc((structmystru));

myfunc((structmystru));

myfunc((structmystru));

myfunc((structmystru));

myfunc((structmystru));

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

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

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

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

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 ...