2009-03-01 14 views
49

natknąłem definicji funkcji:Pytanie o definicji funkcji (trzy kropki w parametrach ..)

char* abc(char *f, ...) 
{ 
} 

Co oznaczają trzy kropki oznaczają?

+6

dziękuję wszystkim za szybką odpowiedź ... ta społeczność jest po prostu niesamowita .. – ashishsony

+1

well.this pytanie pokazuje, że nie zwracam uwagi, podczas gdy ja kodowałem przez ostatni rok zawodowo, ponieważ użyłem printf, scanf tyle razy ... ale nigdy nie kliknęło mnie, jak te funkcje mogą akceptować nieograniczone argumenty ... Muszę zadawać sobie takie pytania znacznie częściej. – ashishsony

Odpowiedz

38

Elipsy oznaczają, że istnieje zmienna liczba argumentów następujących po nich: Miejsce, w którym będziesz je używał (być może nie zdając sobie z tego sprawy) to rodzina funkcji printf.

Umożliwiają one tworzenie funkcji tego stylu, w których parametry nie są wcześniej znane, oraz można użyć funkcji varargs (va_start, va_arg i va_end), aby uzyskać konkretne argumenty.

Ten link here ma dobry traktat na temat używania zmiennych list argumentów printf.

11

Nazywane są one elipsis i oznaczają, że funkcja może przyjmować nieokreśloną liczbę parametrów. Twoja funkcja może być prawdopodobnie tak nazwana:

abc("foo", 0); 
abc("foo", "bar", 0); 

Potrzebny jest sposób wskazania końca listy. Można to zrobić za pomocą pierwszego parametru, jako jonowego printf (łańcuch formatu 0 lub przez specjalny terminator, zero w powyższym przykładzie)

Funkcje o zmiennej liczbie parametrów są uważane za złe w C++, as nie można wykonywać sprawdzania typów ani konwersji zdefiniowanych przez użytkownika dla parametrów

3

To jest to, co nazywamy funkcję varargs lub zmiennej funkcji argument C

One prawdopodobnie będziesz rozpoznania jest printf.