C'nin BNF gramerine bakarken, bir deklarasyon için üretim kuralının böyle görünmesinin garip olduğunu düşündüm ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% uyarınca 20C% 20in% 20Backus-Naur% 20form.htm ):
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
Neden bir *
nicelik belirteci (sıfır veya daha fazla tekrarlama anlamına gelir) init-declarator
? Bu, anlamsal olarak geçersiz olmalarına rağmen int;
veya gibi ifadelerin void;
sözdizimsel olarak geçerli olmasına izin verir . Üretim kuralı +
yerine bir nicelik belirteci (bir veya daha fazla tekrar) kullanamazlar mıydı *
?
Derleyicinin çıktılarını görmek için basit bir program derlemeyi denedim ve tüm yaptığı uyarı.
Giriş:
int main(void) {
int;
}
Çıktı:
test.c: In function ‘main’:
test.c:2:5: warning: useless type name in empty declaration
int;
^~~
int
için bir dönüş türü olarak main
kullanın ()
ve işlevlerde bir parametre türleri listesi olarak (void)
kullanmayın.