2013-07-21 37 views
6

böyle birden fazla değişken bildirmek yapabiliyorsanız:Her resmi argümanın veri türünü neden ayrı ayrı belirtmeliyiz?

void fun(int i, j, k) 

yerine:

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

Dil özelliklerinden dolayı. – sehe

+5

Prototipler olmadan C'nin tarih öncesi davranışı ve C++ tarafından yapılan tasarım kararının önerdiğiniz sözdizimine izin vermemesi. Ayrıca, mevcut işlev tanımı 'void f1 (int i1, int i2, double d1, double d2)' verildiğinde, varyant sözdiziminize nasıl yazarsınız? void f1 (int i1, i2; çift d1, d2) '? Yoksa noktalı virgül yerleştirdiğim bir virgül mü kullanırdınız? Veya başka bir şey? –

+1

İlk satır, * üç * değişken, ikincisi ise yalnızca birini bildirir. Doğru benzetme, int a = 1, * b = & a, foo (char, char); –

cevap

16
Ben resmi argümanlar içinde yazarken sonra

int i, j, k; 

neden hata alıyorum

Çünkü C sözdizimi bu şekilde çalışmıyor. Parametre beyanları, çeşitli şekillerde değişken bildirimlerden farklıdır, örn.

void fun(int i, double x); 

vs sözdizimi tarafından izin verilir denedin formu (örneğin onun func fun(i, j, k int) ile gidin izin uzatıldı olabilirdi iken, standart komitesi bu yapmamaya karar

int i, double x;   // syntax error 

muhtemelen hala geriye dönük uyumluluk için ANSI C89/ISO C90 desteklenmiştir eski tarz ("K & R" önceden 1989) parametre söz dizimi, karşısında kafa karıştırıcı olabilir, çünkü.

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) 
{ 
} 
İlgili konular