সি এর বিএনএফ ব্যাকরণটি অনুসন্ধান করার সময়, আমি ভেবেছিলাম এটি অদ্ভুত যে কোনও ঘোষণার জন্য উত্পাদনের নিয়মটি এরকম দেখাচ্ছে ( https://cs.wmich.edu/~gapt/teaching/cs4850/sumII06/The%20syntax%20of% অনুসারে) 20C% 20in% 20Backus-Naur% 20 form.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)পরিবর্তে।