উত্তর:
ইন সি :
void foo()
এর অর্থ " foo
অনির্ধারিত ধরণের আর্গুমেন্টের একটি অনির্দিষ্ট সংখ্যক ক্রিয়া গ্রহণ করা" void foo(void)
এর অর্থ " foo
কোন তর্ক নেই কোন ক্রিয়া "ইন সি ++ :
void foo()
এর অর্থ " foo
কোন তর্ক নেই কোন ক্রিয়া " void foo(void)
এর অর্থ " foo
কোন তর্ক নেই কোন ক্রিয়া "foo(void)
সুতরাং, লিখে , আমরা উভয় ভাষায় একই ব্যাখ্যা অর্জন করি এবং আমাদের শিরোনামকে বহুভাষিক করে তুলি (যদিও সাধারণত শিরোনামকে সত্যিকার অর্থে ভাষা তৈরি করার জন্য আমাদের সাধারণত আরও কিছু কাজ করার প্রয়োজন হয়; যথা, extern "C"
আমরা যদি সংকলন করে থাকি তবে এগুলিকে আবদ্ধ করে রাখি সি ++)।
void
তবে এটি "সর্বাধিক ভেক্সিং পার্স" সমস্যাটি এড়াতে পারত।
void foo()
এটি কোনও ফাংশন ঘোষণা করার একমাত্র সিনট্যাক্স ছিল। স্বাক্ষরগুলি যেখানে চালু হয়েছিল, সি কমিটি পুরানো বাক্য গঠন থেকে নো-প্যারামিটার ছিন্ন করতে হবে এবং void foo(void)
সিনট্যাক্সটি প্রবর্তন করতে হয়েছিল । সি ++ এটি সামঞ্জস্যের জন্য নিয়েছে।
void foo()
পরিবর্তে void foo(void)
কার্যকরী পার্থক্য দেখা দেয়? আমি বহু বছর ধরে শূন্যতা ছাড়াই সংস্করণটি ব্যবহার করে আসছি এবং কোন সমস্যা দেখিনি, আমি কি কিছু অনুভব করছি?
void foo() { if ( rand() ) foo(5); }
সংকলন করে এবং রান করে (আপনি খুব ভাগ্যবান না হওয়া পর্যন্ত অপরিজ্ঞাত আচরণের কারণ হয়ে দাঁড়ান ), অন্যদিকে void foo(void)
একই শরীরের সাহায্যে সংকলনের ত্রুটি ঘটবে।
আমি বুঝতে পারি আপনার প্রশ্নটি সি ++ এর সাথে সম্পর্কিত, তবে এটি যখন সি এ আসে তখন উত্তরটি কে ওআর, পৃষ্ঠা 72২- 7273 এ পাওয়া যাবে:
তদুপরি, যদি কোনও ফাংশন ঘোষণায় যুক্তিগুলি অন্তর্ভুক্ত না হয় তবে
double atof();
তারও অর্থ এই হিসাবে নেওয়া হয়েছে যে এটির পক্ষে যুক্তি সম্পর্কে কিছুই অনুমান করা উচিত নয়; সমস্ত প্যারামিটার চেকিং বন্ধ আছে। খালি যুক্তি তালিকার এই বিশেষ অর্থটি পুরানো সি প্রোগ্রামগুলিকে নতুন সংকলকগুলির সাথে সংকলনের অনুমতি দেওয়ার উদ্দেশ্যে to তবে এটি নতুন প্রোগ্রামগুলির সাথে ব্যবহার করা খারাপ ধারণা। যদি ফাংশনটি আর্গুমেন্ট নেয়, তাদের ঘোষণা করুন; যদি এটি কোনও যুক্তি না নেয় তবে অকার্যকর ব্যবহার করুন।
সি ++ 11 এন 3337 স্ট্যান্ডার্ড খসড়া
এখানে কোন পার্থক্য নেই.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
সংযুক্তি সি "সামঞ্জস্যতা" C.1.7 ধারা 8: ঘোষকগণ বলেছেন:
8.3.5 পরিবর্তন: সি ++ এ, খালি প্যারামিটার তালিকার সাথে ঘোষিত একটি ফাংশন কোনও আর্গুমেন্ট নেয় না। সি-তে, খালি প্যারামিটার তালিকার অর্থ ফাংশন আর্গুমেন্টগুলির সংখ্যা এবং ধরণের অজানা।
উদাহরণ:
int f(); // means int f(void) in C ++ // int f( unknown ) in C
যুক্তিযুক্ত: এটি ভ্রান্ত ফাংশন কলগুলি এড়ানোর জন্য (যেমন, ভুল নম্বর বা যুক্তির ধরণের সাথে ফাংশন কলগুলি)।
মূল বৈশিষ্ট্যের উপর প্রভাব: সুনির্দিষ্ট সংজ্ঞাযুক্ত বৈশিষ্ট্যের শব্দার্থবিজ্ঞানে পরিবর্তন। এই বৈশিষ্ট্যটি সিতে "অপ্রচলিত" হিসাবে চিহ্নিত করা হয়েছিল
8.5.3 ফাংশন বলেছেন:
৪. প্যারামিটার-ডিক্লেয়ারেশন-ক্লজটি নির্দিষ্ট করা যেতে পারে এমন আর্গুমেন্টগুলি এবং তাদের প্রসেসিং, যখন ফাংশনটি বলা হয় তখন তা নির্ধারণ করে। [...] যদি প্যারামিটার-ঘোষণা-ধারাটি খালি থাকে তবে ফাংশনটি কোনও আর্গুমেন্ট নেয় না। পরামিতি তালিকা (অকার্যকর) খালি প্যারামিটার তালিকার সমান।
C99
সি ++ 11 দ্বারা উল্লিখিত হিসাবে int f()
আর্গুমেন্টগুলি সম্পর্কে কিছুই নির্দিষ্ট করে না এবং অপ্রচলিত।
এটি হয় ওয়ার্কিং কোড বা ইউবি হতে পারে।
আমি সি 99 মানটি এখানে বিশদভাবে ব্যাখ্যা করেছি: https://stackoverflow.com/a/36292431/895245
সি তে, আপনি একটি খালি ফাংশন রেফারেন্সে একটি শূন্যতা ব্যবহার করেন যাতে কম্পাইলারের একটি প্রোটোটাইপ থাকে এবং সেই প্রোটোটাইপের "কোনও যুক্তি নেই"। সি ++ এ আপনাকে সংকলকটি বলতে হবে না যে আপনার কাছে প্রোটোটাইপ রয়েছে কারণ আপনি প্রোটোটাইপটি ছেড়ে যেতে পারেন না।