2013-07-21 8 views
6

Jeśli możemy zadeklarować więcej niż jednej zmiennej takiego:Dlaczego musimy określać typ danych każdego formalnego argumentu osobno?

int i, j, k; 

następnie Dlaczego pojawia się błąd, gdy piszę w formalnych argumentów:

void fun(int i, j, k) 

zamiast:

void fun(int i, int j, int k) 
+24

Ze względu na specyfikację języka. – sehe

+5

Z powodu prehistorycznego zachowania się C bez prototypów oraz decyzji projektowej dokonanej przez C++, aby nie pozwolić na sugerowaną składnię. Ponadto, biorąc pod uwagę bieżącą definicję funkcji 'void f1 (int i1, int i2, double d1, double d2)', jak byś napisał to w swojej wariacyjnej składni? 'void f1 (int i1, i2; double d1, d2)'? A może użyjesz przecinka, w którym umieściłem średnik? Albo coś innego? –

+1

Pierwszy wiersz deklaruje * trzy * zmienne, a drugi tylko jeden. Poprawną analogią byłoby coś takiego jak 'int a = 1, * b = & a, foo (char, char);' –

Odpowiedz

16

Bo tak nie działa składnia C. Deklaracje parametrów różnią się od deklaracji zmiennych na kilka sposobów, np.

void fun(int i, double x); 

vs.

int i, double x;   // syntax error 

Podczas składnia mógł zostać przedłużony, aby umożliwić formularz próbował (co jest dopuszczalne przez, na przykład, idź z jego func fun(i, j, k int), średnia komisja postanowiła nie to zrobić , przypuszczalnie dlatego, że byłoby to kłopotliwe w obliczu starego stylu ("K & R", pre-1989) składnia parametr, który nadal był wspierany w ANSI/ISO C89 C90 dla kompatybilności wstecznej.

void fun(i, j) // K&R syntax: implicitly int i, int j 
{ 
} 

void fun(i, p) 
    int *p;  // int i implicit! 
{ 
} 

// What's this? double i? double *i? Mixed K&R/ANSI syntax with implicit int i? 
void fun(double *x, i) 
{ 
} 
Powiązane problemy