下面這段程式是乙個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))
struct
mystru ;
void
myfunc(
struct
mystru ms )
int
main(
int
argc,
char
**argv)
從上面這段程式,我們可以看到乙個叫 myfunc的函式,被func的巨集改變了,本來myfunc需要的是乙個叫mystru的結構,然而通過巨集,我們把struct mystru的這個引數,變成了不定引數列表的乙個函式。上面這段程式輸出入下,
three: 3雖然,這樣的用法並不好,但是你可以從另外乙個方面了解一下這世上對c稀奇古怪的用法。 如果你把巨集展開後,你就明的為什麼了。下面是巨集展開的樣子:hello: 0
zero: 0
argc: 1
untitled: 42
1
2
3
4
5
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下正常編譯通過 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 ...