আমরা যখন সি ল্যাঙ্গুয়েজে কোড লেখি তখন কোডের main() ফাংশন থেকে এক্সিকিউশন শুরু হয়। main() ফাংশন যদি এইভাবে ডিক্লেয়ার করা হয়:
int main()
তাহলে কম্পাইলার আশা করে যে ফাংশনটি যখন এক্সিকিউশন শেষ হবে তখন সে একটি ইন্টিজার রিটার্ন করবে। অর্থাৎ, ফাংশনের শেষে আমাদের কোনো একটা ইন্টিজার রিটার্ন করতে হবে। প্রচলিত নিয়মে 0 রিটার্ন করা হয়, প্রোগ্রামটি ঠিকভাবে কোনো সমস্যা ছাড়াই চলেছে সেটা বোঝানোর জন্য। তবে 0 ই যে রিটার্ন করতে হবে এমন কোনো কথা নেই। চাইলে যেকোন ইন্টিজার-ই রিটার্ন করা যায়।
ISO/IEC 9899:1989 (C90) আদর্শ নীতিমালা অনুযায়ী নিচে উল্লেখিত তিনটি উপায়ে main() ফাংশন ডিক্লেয়ার করা যাবে।
int main(void) int main(int argc, char **argv) int main(int argc, char *argv[])
যেখানে দ্বিতীয় ও তৃতীয় লাইন টি সমতূল্য। কমান্ড লাইন থেকে ইনপুট নেওয়ার ক্ষেত্রে দ্বিতীয় অথবা তৃতীয়টি ব্যবহার করা হয়।
রিটার্নের ব্যপারে আদর্শ নীতিমালা হচ্ছে একটি প্রোগ্রাম তিন ধরনের মান রিটার্ন করতে পারবে,
0 EXIT_SUCCESS EXIT_FAILURE
যেখানে দ্বিতীয় ও তৃতীয় মানটি stdlib.h ফাইলে #define করা আছে।
ISO/IEC 9899:1999 (C99) আদর্শ নীতিমালায় আরো যে শর্ত আরোপ করা হয়েছে তা হলো,
আমরা যদি চাই যে কিছুই রিটার্ন করবো না, সেক্ষেত্রে আমরা int main() এর পরিবর্তে void main() ব্যবহার করতে পারি। তবে int main() ব্যবহার করাটাই বেশি সমর্থিত ও উৎসাহিত।
সি++ ল্যাঙ্গুয়েজেও C99 এর মতো তিনভাবে main() ফাংশন ডিক্লেয়ার করা যায়।
int main(void) int main(int argc, char **argv) int main(int argc, char *argv[])
সি++ এর আদর্শ নিয়মে void main() ব্যবহার করা একেবারেই নিষিদ্ধ, অর্থাৎ main() ফাংশনকে অবশ্যই ইন্টিজার রিটার্ন করতে হবে, তা না হলে কোড কম্পাইল হবে না।
আমরা যখন কোনো একটা কোড লিখে প্রোগ্রামটি চালাই, আমরা অপারেটিং সিস্টেমকে নির্দেশ দেই এবং অপারেটিং সিস্টেম প্রোগ্রামটিকে চালায়। প্রোগ্রামের এক্সিকিউশন যখন শেষ হবে তখন সে 0 মানটি অপারেটিং সিস্টেম এর কাছে রিটার্ন করবে। 0 নির্দেশ করে যে প্রোগ্রামটি সঠিক ভাবে চলেছে। আমরা অপারেটিং সিস্টেম অথবা কোনো কমান্ড লাইনের মাধ্যমে যেভাবেই প্রোগ্রাম চালাই না কেনো, প্রোগ্রাম কত মান রিটার্ন করলো সেটা গুরুত্বপূর্ন না। যেটা জানা গুরুত্বপূর্ণ সেটা হলো প্রোগ্রামটা ঠিকভাবে চলে শেষ হয়েছে কিনা। আদর্শ নিয়ম হচ্ছে,
আবার, কিছু কিছু ক্ষেত্রে রিটার্নকৃত মানটি গুরুত্বপূর্ণ হতে পারে। ধরা যাক, আমি এমন একটা প্রোগ্রাম করলাম যেটা আরো দশটা চাইল্ড প্রোগ্রামকে বিভিন্ন থ্রেডে চালায়। সেক্ষেত্রে, কোন থ্রেডের কোন প্রসেসটা কত মান রিটার্ন করলো তার উপর ভিত্তি করে সিদ্ধান্ত গ্রহন বা লজিক ইমপ্লিমেন্ট করার প্রয়োজন থাকতে পারে। আবার, ক্ষেত্র বিশেষে আমরা ভিন্ন ভিন্ন এররের ক্ষেত্রে ভিন্ন ভিন্ন রিটার্ন মান নিজেরা #define করে নিতে পারি। তাহলে, ওই প্রোগামের প্যারেন্ট প্রোগ্রাম থেকে আমরা সিদ্ধান্ত নিতে পারবো, প্রোগ্রামটা ঠিকমতো চলেছে কিনা এবং যদি ঠিকমতো না চলে থাকে তাহলে ঠিক কোথায় এরর টা হয়েছে।
সূত্র : http://ask.dimikcomputing.com/questions/15/return-0