जब सी के बीएनएफ व्याकरण के माध्यम से देखते हैं, तो मुझे लगा कि यह अजीब था कि एक घोषणा के लिए उत्पादन नियम इस तरह दिखता था ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06 के अनुसार )% 20syntax%20of% 20C% 20in% 20Backus-Naur% 20form.htm ):
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
एक *
क्वांटिफायर (शून्य या अधिक घटनाओं का अर्थ) का उपयोग क्यों करें init-declarator
? इस बयान के रूप में ऐसी अनुमति देता है int;
या void;
वाक्य रचना मान्य होने के लिए, भले ही वे अर्थ की दृष्टि से अमान्य कर रहे हैं। क्या वे उत्पादन नियम के +
बजाय केवल एक मात्रा (एक या अधिक घटनाओं) का उपयोग नहीं कर सकते *
थे?
मैंने यह देखने के लिए एक साधारण प्रोग्राम संकलित करने की कोशिश की कि कंपाइलर आउटपुट क्या है और यह सब एक चेतावनी जारी करता है।
इनपुट:
int main(void) {
int;
}
आउटपुट:
test.c: In function ‘main’:
test.c:2:5: warning: useless type name in empty declaration
int;
^~~
int
एक वापसी प्रकार के रूप में main
उपयोग करें और ()
कार्यों के (void)
बजाय एक पैरामीटर प्रकार सूची के रूप में उपयोग न करें ।