7
4

সি প্রোগ্রামে মেইন ফাংশনের ভেতরে return 0 কেন ব্যবহার করা হয়?

asked 30 Oct '14, 15:02

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
6.2k21128

edited 02 Feb '15, 13:54

tahmidrafi's gravatar image

tahmidrafi ♦♦
1.1k214


সংক্ষিপ্ত উত্তর

আমরা যখন সি ল্যাঙ্গুয়েজে কোড লেখি তখন কোডের 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) আদর্শ নীতিমালায় আরো যে শর্ত আরোপ করা হয়েছে তা হলো,

  • main() ফাংশনের ডিক্লেয়ারেশনে int শব্দটা অবশ্যই উল্লেখ করতে হবে। অর্থাৎ, main() না লিখে অবশ্যই int main() লিখতে হবে।
  • return 0 কথাটি চাইলে বাদ দেওয়া যাবে। যদি এই লাইনটা না লেখা হয় ডিফল্ট হিসেবে main() ফাংশন এক্সিকিউশনের শেষে 0 রিটার্ন করা হবে।

আমরা যদি চাই যে কিছুই রিটার্ন করবো না, সেক্ষেত্রে আমরা 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() ফাংশনকে অবশ্যই ইন্টিজার রিটার্ন করতে হবে, তা না হলে কোড কম্পাইল হবে না।

এখন প্রশ্ন হচ্ছে main() ফাংশনের কিছু রিটার্ন করার প্রয়োজন কি?

আমরা যখন কোনো একটা কোড লিখে প্রোগ্রামটি চালাই, আমরা অপারেটিং সিস্টেমকে নির্দেশ দেই এবং অপারেটিং সিস্টেম প্রোগ্রামটিকে চালায়। প্রোগ্রামের এক্সিকিউশন যখন শেষ হবে তখন সে 0 মানটি অপারেটিং সিস্টেম এর কাছে রিটার্ন করবে। 0 নির্দেশ করে যে প্রোগ্রামটি সঠিক ভাবে চলেছে। আমরা অপারেটিং সিস্টেম অথবা কোনো কমান্ড লাইনের মাধ্যমে যেভাবেই প্রোগ্রাম চালাই না কেনো, প্রোগ্রাম কত মান রিটার্ন করলো সেটা গুরুত্বপূর্ন না। যেটা জানা গুরুত্বপূর্ণ সেটা হলো প্রোগ্রামটা ঠিকভাবে চলে শেষ হয়েছে কিনা। আদর্শ নিয়ম হচ্ছে,

  • প্রোগ্রাম ঠিকভাবে চলে এক্সিট করলে 0 রিটার্ন করা, এবং
  • প্রোগ্রাম চলাকালে কোনো এরর (মেমোরী ওভারফ্লো অথবা অ্যাড্রেসিং সংক্রান্ত এরর অথবা যে কোনো এরর) হয়ে যদি প্রোগ্রামটি মধ্যপথেই বন্ধ হয়ে যায় তাহলে, 0 ছাড়া যেকোন মান রিটার্ন করা।

আবার, কিছু কিছু ক্ষেত্রে রিটার্নকৃত মানটি গুরুত্বপূর্ণ হতে পারে। ধরা যাক, আমি এমন একটা প্রোগ্রাম করলাম যেটা আরো দশটা চাইল্ড প্রোগ্রামকে বিভিন্ন থ্রেডে চালায়। সেক্ষেত্রে, কোন থ্রেডের কোন প্রসেসটা কত মান রিটার্ন করলো তার উপর ভিত্তি করে সিদ্ধান্ত গ্রহন বা লজিক ইমপ্লিমেন্ট করার প্রয়োজন থাকতে পারে। আবার, ক্ষেত্র বিশেষে আমরা ভিন্ন ভিন্ন এররের ক্ষেত্রে ভিন্ন ভিন্ন রিটার্ন মান নিজেরা #define করে নিতে পারি। তাহলে, ওই প্রোগামের প্যারেন্ট প্রোগ্রাম থেকে আমরা সিদ্ধান্ত নিতে পারবো, প্রোগ্রামটা ঠিকমতো চলেছে কিনা এবং যদি ঠিকমতো না চলে থাকে তাহলে ঠিক কোথায় এরর টা হয়েছে।

permanent link

answered 30 Oct '14, 22:13

tahmidrafi's gravatar image

tahmidrafi ♦♦
1.1k214

edited 05 Jan '15, 20:09

C প্রোগ্রামে মেইন ফাংশন int type return করে। তাই int main() ফাংশনে return 0 থাকে প্রোগ্রাম সফল ভাবে সম্পন্ন হয়েছে বোঝার জন্য।

permanent link

answered 30 Oct '14, 15:34

__salman__'s gravatar image

__salman__ ♦♦
1.1k211

Function Block এর শেষ বুঝানোর জন্য return স্টেটমেন্ট ব্যবহৃত হয়।

permanent link

answered 30 Oct '14, 15:16

Md%20Osman%20Goni's gravatar image

Md Osman Goni
7129

একটা প্রোগ্রাম সম্পন্ন হয়েছে, এটা বোঝানোর জন্যই আমরা প্রোগ্রামে return 0; ব্যবহার করে থাকি।

permanent link

answered 09 Nov '14, 07:21

Avro%20Jeet's gravatar image

Avro Jeet
858

1

যখন কোনো প্রশ্নের উত্তর লিখা হবে, তখন দেখতে হবে একই কথা অন্য কেউ বলেছে কী না। নতুন কিছু বলার না থাকলে উত্তর লেখাটা মোটেও কাজের কিছু নয়। :)

(09 Nov '14, 12:23) Tamim Shahriar Subeen ♦♦
-4

১) return দেখলে কম্পাইলার বুঝতে পারে প্রোগ্রামটা এখানে শেষ। ২) কোন কোন প্রোগ্রাম কোন একটা আউটপুট return করে, যদি int টাইপের হয় তাহলে শুরুতে তা বলে দিতে হয়। ৩) return 0 মানে এই প্রোগ্রাম কোন কিছু return করবে না ।

permanent link

answered 30 Oct '14, 15:37

masalehh's gravatar image

masalehh
1936

4

১ নম্বর পয়েন্টটা ভূল, কম্পাইলার কি বুঝতে পারলো তাতে কিছু যায় আসে না। return স্টেটমেন্ট এর উদ্দেশ্য হচ্ছে, কম্পাইল হয়ে যাওয়ার পরে প্রোগ্রাম চলাকালীন সময়ে ফাংশনটাকে যেখান থেকে কল করা হয়েছে সেখানে ফেরত যাওয়া। ৩ নম্বর পয়েন্টটাও ভূল, return 0 মানে এই ফাংশন বা প্রোগ্রাম 0 রিটার্ন করবে। কিছুই না রিটার্ন করলে লিখতে হবে return এবং সেক্ষেত্রে ফাংশনের প্রোটোটাইপ হতে হবে void func()

(30 Oct '14, 22:24) tahmidrafi ♦♦
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×402
×90
×63

question asked: 30 Oct '14, 15:02

question was seen: 11,293 times

last updated: 02 Feb '15, 13:54