আমি শুনেছি যে ফাংশনগুলি এই জাতীয় প্যারামিটার হিসাবে কিছু না পায় তা লিখতে ভাল অনুশীলন:
int func(void);
তবে আমি শুনেছি যে প্রকাশের সঠিক উপায়টি এরকম:
int func();
সি এবং সি ++ উভয় ক্ষেত্রে এই দুটি ফাংশন ঘোষণার মধ্যে পার্থক্য কী?
আমি শুনেছি যে ফাংশনগুলি এই জাতীয় প্যারামিটার হিসাবে কিছু না পায় তা লিখতে ভাল অনুশীলন:
int func(void);
তবে আমি শুনেছি যে প্রকাশের সঠিক উপায়টি এরকম:
int func();
সি এবং সি ++ উভয় ক্ষেত্রে এই দুটি ফাংশন ঘোষণার মধ্যে পার্থক্য কী?
উত্তর:
সি এবং সি ++ এই ক্ষেত্রে আলাদা।
7.7..6.৩ ফাংশন ডিক্লেটারগুলি (প্রোটোটাইপ সহ)
...
10void
তালিকার একমাত্র আইটেম হিসাবে নামবিহীন পরামিতিগুলির বিশেষ ক্ষেত্রে নির্দিষ্ট করে যে ফাংশনের কোনও পরামিতি নেই।
...
14 একটি সনাক্তকারী তালিকা ফাংশনের পরামিতিগুলির সনাক্তকারীদের কেবলমাত্র ঘোষণা করে। ফাংশন ডিক্লেয়ারের একটি ফাঁকা তালিকা যা সেই ফাংশনের সংজ্ঞাটির অংশ এটি নির্দিষ্ট করে যে ফাংশনের কোনও প্যারামিটার নেই। কোনও ফাংশন ডিক্লেয়ারের খালি তালিকা যা সেই ফাংশনের সংজ্ঞাটির অংশ নয় এটি নির্দিষ্ট করে যে পরামিতিগুলির সংখ্যা বা প্রকার সম্পর্কে কোনও তথ্য সরবরাহ করা হয়নি। 145)
সংক্ষেপে, একটি ফাংশন ঘোষণায় একটি খালি প্যারামিটার তালিকা নির্দেশ করে যে ফাংশনটি একটি অনির্দিষ্ট পরামিতি নেয় , অন্যদিকে কোনও ফাংশন সংজ্ঞায় একটি খালি পরামিতি তালিকা নির্দেশ করে যে ফাংশনটি কোনও পরামিতি নেয় না ।
T foo( void ); // declaration, foo takes no parameters
T bar(); // declaration, bar takes an *unspecified* number of parameters
T foo( void ) { ... } // definition, foo takes no parameters
T bar() { ... } // definition, bar takes no parameters
যতদূর সি সম্পর্কিত, আপনার কোনও ক্রিয়াকলাপের ঘোষণা বা সংজ্ঞায় খালি শনাক্তকারী তালিকা ব্যবহার করা উচিত নয় । যদি কোনও ফাংশন কোনও প্যারামিটার নিতে না void
হয় তবে পরামিতি তালিকায় এটি নির্দিষ্ট করে ।
8.3.5 ফাংশন [dcl.fct]
...
4 পরামিতি-ঘোষণার-ধারাটি নির্দিষ্ট করা যেতে পারে এমন আর্গুমেন্টগুলি এবং তাদের প্রসেসিং, যখন ফাংশন বলা হয় তখন তা নির্ধারণ করে। [ নোট: প্যারামিটার-ঘোষণা-দফা আর্গুমেন্ট ফাংশন কল উল্লিখিত রূপান্তর করতে ব্যবহার করা হয়; 5.2.2 দেখুন। - শেষ দ্রষ্টব্য ] যদি প্যারামিটার-ঘোষণা-ধারাটি খালি থাকে তবে ফাংশনটি কোনও আর্গুমেন্ট নেয় না। অ-নির্ভরশীল ধরণের একক নামবিহীন প্যারামিটারvoid
সমন্বিত একটি প্যারামিটার তালিকা খালি প্যারামিটার তালিকার সমতুল্য। এই বিশেষ ক্ষেত্রে ব্যতীত, কোনও প্যারামিটারের ধরণ থাকবে নাcv void
। যদি প্যারামিটার-ঘোষণা-ধারাএকটি উপবৃত্ত বা একটি ফাংশন প্যারামিটার প্যাক (14.5.3) দিয়ে সমাপ্ত হয়, আর্গুমেন্টের সংখ্যা প্যারামিটারের সংখ্যার সমান বা তার চেয়ে বেশি হবে যেগুলির ডিফল্ট যুক্তি নেই এবং ফাংশন প্যারামিটার প্যাকগুলি নেই। যেখানে সিনথেটিকভাবে সঠিক এবং যেখানে "..." কোনও বিমূর্ত-ঘোষণাকারীর অংশ নয় , ", ..." "..." এর সমার্থক শব্দ। [ উদাহরণ: ঘোষণাএকটি ফাংশন ঘোষণা করে যা বিভিন্ন সংখ্যা এবং আর্গুমেন্টের ধরণের সাথে ডাকা যেতে পারে।int printf(const char*, ...);
যাইহোক, প্রথম যুক্তি অবশ্যই একটি প্রকারের হতে হবে যা একটিprintf("hello world"); printf("a=%d b=%d", a, b);
const char*
- শেষ উদাহরণে রূপান্তর করা যায় ] [ দ্রষ্টব্য: স্ট্যান্ডার্ড শিরোনামে<cstdarg>
উপবৃত্ত ব্যবহার করে পাস করা আর্গুমেন্ট অ্যাক্সেসের জন্য একটি ব্যবস্থা রয়েছে (দেখুন 5.2.2 এবং 18.10)। - শেষ নোট ]
সি ++ এর ক্ষেত্রে, ঘোষণাপত্র বা সংজ্ঞায়িত হয় ফাঁকা প্যারামিটার তালিকাটি ইঙ্গিত দেয় যে ফাংশনটি কোনও আর্গুমেন্ট নেয় না, এবং এর পরামিতি তালিকা ব্যবহারের সমতুল্য void
।
সি-তে, খালি প্যারামিটার তালিকা সহ একটি ফাংশন তার তর্কগুলির জন্য ()
যে কোনও কিছুই নিতে পারে। আক্ষরিক কিছু। এটি সাধারণত কোনও ফাংশন বাস্তবায়নের জন্য ব্যবহৃত হয় যা বিভিন্ন পরিবর্তনশীল আর্গুমেন্ট নিতে পারে যদিও এই দিনগুলিতে (...)
এই ফাংশনগুলির জন্য আরও স্পষ্টভাবে উপবৃত্তাকার সিনট্যাক্স ব্যবহার করা ভাল বলে বিবেচিত হয়।
সি তে, পরামিতি তালিকার একটি ফাংশন (void)
স্পষ্টভাবে তার যুক্তিগুলির জন্য কিছুই নেয় না । এর অর্থ আপনি যদি কিছু পাস করার চেষ্টা করেন তবে সংকলকটি আপনাকে বলতে পারে যে আপনি ভুল করেছেন actually
সি ++ এ, এই ফাংশন ঘোষণাগুলি সমতুল্য। একটি খালি প্যারামিটার তালিকার অর্থ "কোনও পরামিতি নেই" এর মতোই void
।
()
। আপনার কাছে এমন কোনও প্রোগ্রামের উদাহরণ রয়েছে যা এই সম্মেলনটি ব্যবহার করে?
...
সিনট্যাক্স, এবং এটি অন্তত একটি নামে প্যারামিটার থাকা আবশ্যক। এ জাতীয় ফাংশন সংজ্ঞায়িত করে অপরিবর্তিত ()
আচরণের কারণ - এবং <stdarg.h>
প্যারামিটারের মানগুলি পড়ার জন্য সংজ্ঞায়িত ম্যাক্রোগুলি ব্যবহারের কোনও উপায় নেই function 1989/1990 স্ট্যান্ডার্ডের পরে থেকে এটি ঘটেছে।
...
।