Friday, September 20, 2019

C Programming Level beginner 05

আমরা যদি Hello, World!! লেখাটি দেখাতে চাই তাহলে যা করতে হবে ঃ
প্রথমত, এটা খুবই ছোট একটা প্রোগ্রাম। এখানে #include <stdio.h> দ্বারা প্রোগ্রামের head বুঝানো হয়েছে। stdio দ্বারা বুঝায় standard input output. একটি ছোট প্রোগ্রাম লিখতে হলেও কিছু ফাংশন লাগে যা standard input output এর মধ্যে থাকে, এগুলো দিয়ে আমরা আগেই বলে দিলাম যে আমরা এর মধ্যে অবস্থিত ফাংশান গুলো ব্যবহার করব। আমরা যখন ঐ ধরনের কোন ফাংশনকে ডাকি তখন তা ব্যবহৃত হয়। আর.h দ্বারা header বুঝানো হয়।

main() হছে একটি ফাংশান। এটি দ্বারা বুঝানো হয় যে প্রোগ্রামটি এখান থেকে শুরু হয়েছে। একটি প্রোগ্রাম লিখলে তা কম্পাইলার কে বলে দিতে হয় কোথায় থেকে শুরু হচ্ছে প্রোগ্রামটা। প্রোগ্রাম রান করলে কোন এক যায়গা থেকে শুরু করতে হয়, main() দিয়ে তাই বলা হয় যে প্রোগ্রামটি এখান থেকে শুরু।
printf দ্বারা একটি command দেওয়া হয়েছে “Hello World” print করার জন্য। এটি একটি ফাংশান। যা standard input output  এর অংশ।

#include <stdio.h>
int main()
{
    printf("Hello World");
    return 0;
}

এখন যদি প্রোগরামটি run করাই তাহলে পর্দায় (Hello World) দেখাবে ।


#include <stdio.h> 

                                 এটি একটি প্রিপ্রসেসর command যা standard input output header file(stdio.h) অন্তর্ভুক্ত করে C library থেকে  C program কম্পাইল করবা পূর্বে ।

int main()

                                 int main()  function এটি হল যেখান থেকে C program এক্সিকিউশন শুরু হয় । ফাংশনটি যখন এক্সিকিউশন শেষ হবে তখন সে একটি ইন্টিজার রিটার্ন করবে। অর্থাৎ, ফাংশনের শেষে আমাদের কোনো একটা ইন্টিজার রিটার্ন করতে হবে। প্রচলিত নিয়মে 0 রিটার্ন করা হয়, প্রোগ্রামটি ঠিকভাবে কোনো সমস্যা ছাড়াই চলেছে সেটা বোঝানোর জন্য। তবে 0 ই যে রিটার্ন করতে হবে এমন কোনো কথা নেই। চাইলে যেকোন ইন্টিজার-ই রিটার্ন করা যায়।

{
                                 { এটি main function এর শুরু বুঝায় ।

/*_some_comments_*/

                                  যাই /*   */ এর মধ্যে  দেয়া হবে যেকোনো C program এ , এটি কম্পাইল এবং এক্সিকিউশন এর জন্য বিবেচ্য হবে না ।

printf(“Hello_World! “);      

                                 printf (); command আউটপুট স্ক্রিনে প্রদর্শন করে ।

getch();

                                 getch(); এই command অপেক্ষা করে কিবোর্ড থেকে ইনপুট নেয়ার জন্য

return 0; 

                                 return 0; এই command টি C program (main function) বন্ধ করে এবং returns ০ ।

}



সি ল্যাঙ্গুয়েজ

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 করে নিতে পারি। তাহলে, ওই প্রোগামের প্যারেন্ট প্রোগ্রাম থেকে আমরা সিদ্ধান্ত নিতে পারবো, প্রোগ্রামটা ঠিকমতো চলেছে কিনা এবং যদি ঠিকমতো না চলে থাকে তাহলে ঠিক কোথায় এরর টা হয়েছে।

No comments:

Post a Comment