c++ প্রধান() সি এবং সি++ ফিরে কি উচিত?




সি প্রোগ্রামিং ল্যাঙ্গুয়েজ (15)

C এবং C ++ - int main() বা void main() কেন এবং কেন main() ফাংশন সংজ্ঞায়িত করার সঠিক (সর্বাধিক কার্যকর) উপায়টি? যদি int main() তারপর return 1 return 0 বা return 0 ?

এই প্রশ্নের অনেক সদৃশ আছে, সহ:

সম্পর্কিত:


Answer #1

বর্জন করা return 0

যখন একটি সি বা সি ++ প্রোগ্রাম mainকম্পাইলারের শেষে পৌছায় তখন স্বয়ংক্রিয়ভাবে কোডটি 0 প্রদান করার জন্য স্বয়ংক্রিয়ভাবে কোড তৈরি করবে, সুতরাং return 0;শেষে শেষে স্পষ্ট করার প্রয়োজন নেই main

দ্রষ্টব্য: যখন আমি এই পরামর্শটি করি তখন এটি প্রায়শই দুটি ধরণের মন্তব্যগুলির দ্বারা অনুসরণ করা হয়: "আমি তা জানি না।" অথবা "এটা খারাপ উপদেশ!" আমার যুক্তি হল কম্পাইলার আচরণের উপর নির্ভর করে এটি নিরাপদ এবং কার্যকরী মান দ্বারা স্পষ্টভাবে সমর্থিত। C এর জন্য, C99 থেকে; ISO / IEC 9899 দেখুন: 1999 বিভাগ 5.1.2.2.3:

[...] mainফাংশন থেকে প্রাথমিক কল থেকে exitফেরত mainফাংশনকে তার ফাংশন হিসাবে ফিরিয়ে দেওয়া ফাংশনকে কল করার সমতুল্য । পৌঁছনো }বন্ধ করে mainফাংশন 0 একটি মান ফেরায়।

সি ++ এর জন্য, প্রথম মান থেকেই 1998 সালে; ISO / আইইসি 14882: 1998 বিভাগ 3.6.1 দেখুন:

যদি রিটার্ন স্টেটমেন্টের সম্মুখীন না হয়ে প্রধানের শেষে কন্ট্রোল পৌঁছে যায়, তাহলে প্রভাবটি 0 ফেরত কার্যকর করা হয়;

তখন থেকে উভয় মানের সমস্ত সংস্করণগুলি (C99 এবং C ++ 98) একই ধারণাকে বজায় রেখেছে। আমরা C ++ এ স্বয়ংক্রিয়ভাবে জেনারেট সদস্য ফাংশনগুলিতে নির্ভর করি এবং কিছু লোক ফাংশনের return;শেষে স্পষ্ট বিবৃতি লিখতে voidপারে। বাদ দেওয়ার বিরুদ্ধে কারণ "এটি অদ্ভুত দেখায়" উড়ে বলে মনে হয় । যদি, আমার মত, আপনি সি প্রশ্নটির পরিবর্তনের জন্য যুক্তিটি সম্পর্কে আগ্রহী হন তবে এই প্রশ্নটি পড়ুন । এছাড়াও লক্ষ করুন যে 1990 এর দশকের গোড়ার দিকে এটি "মাতাল অনুশীলন" হিসাবে বিবেচিত হয়েছিল কারণ এটি সময়ে অনির্দিষ্ট আচরণ (যদিও ব্যাপকভাবে সমর্থিত) ছিল।

তাই আমি এটা বাদ দেওয়া উকিল; অন্যরা ভিন্নমত পোষণ করে (প্রায়শই তীব্রভাবে!) যে কোনও ক্ষেত্রে, যদি আপনি কোডটি বাদ দেন এমন কোডটি খুঁজে পান তবে আপনি জানতে পারবেন যে এটি স্পষ্টভাবে মানক দ্বারা সমর্থিত এবং আপনি এটি কী বুঝবেন তা জানতে পারবেন।


Answer #2

উল্লেখ্য যে সি এবং সি ++ মানগুলি দুটি ধরণের বাস্তবায়ন সংজ্ঞায়িত করে: ফ্রিস্ট্যান্ডিং এবং হোস্ট করা।

  • C90 পরিবেশ হোস্ট

    অনুমোদিত ফর্ম 1 :

    int main (void)
    int main (int argc, char *argv[])
    
    main (void)
    main (int argc, char *argv[])
    /*... etc, similar forms with implicit int */

    মন্তব্যসমূহ:

    পূর্ববর্তী দুইটিকে স্পষ্টভাবে অনুমোদিত ফর্ম হিসাবে উল্লেখ করা হয়েছে, অন্যগুলি নিখরচায় অনুমতি দেওয়া হয়েছে কারণ C90 প্রত্যাবর্তনের ধরন এবং ফাংশন পরামিতিগুলির জন্য "অন্তর্নিহিত int" অনুমোদিত। অন্য কোন ফর্ম অনুমতি দেওয়া হয়।

  • C90 freestanding পরিবেশ

    কোন ফর্ম বা প্রধান নাম অনুমতি দেওয়া হয় 2

  • C99 পরিবেশ হোস্ট

    অনুমোদিত ফর্ম 3 :

    int main (void)
    int main (int argc, char *argv[])
    /* or in some other implementation-defined manner. */

    মন্তব্যসমূহ:

    C99 সরানো "অন্তর্নিহিত int" তাই main() আর বৈধ নয়।

    একটি অদ্ভুত, দ্বিধান্বিত বাক্য "বা অন্য কোন বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে" চালু করা হয়েছে। এটিকে " int main() -এর প্যারামিটারগুলি পরিবর্তিত হতে পারে" হিসাবে ব্যাখ্যা করা যেতে পারে "বা প্রধান হিসাবে কোন বাস্তবায়ন-সংজ্ঞায়িত ফর্ম থাকতে পারে"।

    কিছু কম্পাইলার পরবর্তী উপায়ে মান ব্যাখ্যা করতে বেছে নেওয়া হয়েছে। যুক্তিযুক্তভাবে, কেউ সহজেই বলতে পারে না যে তারা নিজেই মানকে উদ্ধৃত করে কঠোরভাবে মেনে চলছে না, কারণ এটি অস্পষ্ট।

    যাইহোক, সম্পূর্ণরূপে বন্য ফর্ম main() সম্ভবত সম্ভব (?) এই নতুন বাক্য অভিপ্রায় অনুমতি। C99 রশ্মি (আদর্শ নয়) বোঝায় যে বাক্যটি int main 4 এর অতিরিক্ত প্যারামিটারগুলিকে বোঝায়।

    তবুও হোস্টেড এনভায়রনমেন্ট প্রোগ্রামের সমাপ্তির জন্য বিভাগটি সেই ক্ষেত্রে বিতর্ক করে যা মূলত ইন্ট 5 ফেরত দেয় না। যদিও এই বিভাগটি কীভাবে ঘোষণা করা উচিত তার জন্য আদর্শ নয় তবে এটি স্পষ্টভাবে বোঝায় যে প্রধান হোস্ট সিস্টেমগুলিতে সম্পূর্ণ বাস্তবায়ন-সংজ্ঞায়িত ভাবে ঘোষণা করা যেতে পারে।

  • C99 freestanding পরিবেশ

    কোন ফর্ম বা প্রধান নাম অনুমতি দেওয়া হয় 6

  • C11 পরিবেশ হোস্ট

    অনুমোদিত ফর্ম 7 :

    int main (void)
    int main (int argc, char *argv[])
    /* or in some other implementation-defined manner. */
  • C11 ফ্রিস্ট্যান্ড পরিবেশ

    কোন ফর্ম বা প্রধান নাম অনুমতি দেওয়া হয় 8

উল্লেখ্য যে int main() উপরের কোনও সংস্করণে C এর কোনও হোস্ট প্রয়োগের জন্য বৈধ ফর্ম হিসাবে তালিকাভুক্ত করা হয়নি। C, C ++, () এবং (void) বিপরীতে বিভিন্ন অর্থ রয়েছে। প্রাক্তন একটি অশ্লীল বৈশিষ্ট্য যা ভাষা থেকে সরানো যেতে পারে। C11 ভবিষ্যতে ভাষা নির্দেশাবলী দেখুন:

6.11.6 ফাংশন ঘোষক

ফাঁকা বন্ধনীগুলির সাহায্যে ফাংশন ঘোষণাকারীর ব্যবহার (প্রোটোটাইপ-ফরম্যাট প্যারামিটার টাইপ ঘোষণাকারীরা নয়) একটি অশ্লীল বৈশিষ্ট্য।

  • সি ++ 03 হোস্ট পরিবেশ

    অনুমোদিত ফর্ম 9 :

    int main ()
    int main (int argc, char *argv[])

    মন্তব্যসমূহ:

    প্রথম ফর্ম ফাঁকা বন্ধনী নোট করুন। C ++ এবং C এই ক্ষেত্রে আলাদা, কারন সি ++ এ এই ফাংশনটি কোনও প্যারামিটার নেয় না। কিন্তু সিতে এটি যে কোনও প্যারামিটার নিতে পারে।

  • সি ++ 03 ফ্রিস্ট্যান্ড পরিবেশ

    স্টার্টআপ এ বলা ফাংশন নাম বাস্তবায়ন-সংজ্ঞায়িত। যদি এটি main() নামে main() এটি অবশ্যই বিবৃত ফর্মগুলি অনুসরণ করতে হবে 10 :

    // implementation-defined name, or 
    int main ()
    int main (int argc, char *argv[])
  • সি ++ 11 হোস্ট পরিবেশ

    অনুমোদিত ফর্ম 11 :

    int main ()
    int main (int argc, char *argv[])

    মন্তব্যসমূহ:

    মান পাঠ্য পরিবর্তন করা হয়েছে কিন্তু এটি একই অর্থ আছে।

  • সি ++ 11 ফ্রিস্ট্যান্ডিং পরিবেশ

    স্টার্টআপ এ বলা ফাংশন নাম বাস্তবায়ন-সংজ্ঞায়িত। যদি এটি main() নামে main() এটি অবশ্যই বিবৃত ফর্মগুলি অনুসরণ করতে হবে 12 :

    // implementation-defined name, or 
    int main ()
    int main (int argc, char *argv[])

তথ্যসূত্র

  1. ANSI X3.159-1989 2.1.2.2 হোস্ট পরিবেশ। "প্রোগ্রাম প্রারম্ভ"

    প্রোগ্রাম প্রারম্ভে বলা ফাংশন প্রধান নামকরণ করা হয়। বাস্তবায়ন এই ফাংশন জন্য কোন প্রোটোটাইপ ঘোষণা। এটি একটি ফেরত প্রকারের সাথে এবং কোন পরামিতি সহ সংজ্ঞায়িত করা হবে:

    int main(void) { /* ... */ } 

    অথবা দুইটি পরামিতি (এখানে আর্গাক এবং আরার্ভ হিসাবে উল্লেখ করা হয়েছে, যদিও কোনও নাম ব্যবহার করা যেতে পারে, যেহেতু তারা যে ফাংশনটি ঘোষিত হয় তার জন্য স্থানীয়):

    int main(int argc, char *argv[]) { /* ... */ }
  2. ANSI X3.159-1989 2.1.2.1 ফ্রাইস্ট্যান্ডিং পরিবেশ:

    একটি বিনামূল্যের পরিবেশে (কোনও অপারেটিং সিস্টেমের কোনও সুবিধা ছাড়াই সি প্রোগ্রাম কার্যকর হতে পারে), প্রোগ্রাম প্রারম্ভে বলা ফাংশনের নাম এবং ধরন বাস্তবায়ন-সংজ্ঞায়িত।

  3. আইএসও 9899: 1999 5.1.2.2 হোস্টেড পরিবেশ -> 5.1.2.2.1 প্রোগ্রাম স্টার্টআপ

    প্রোগ্রাম প্রারম্ভে বলা ফাংশন প্রধান নামকরণ করা হয়। বাস্তবায়ন এই ফাংশন জন্য কোন প্রোটোটাইপ ঘোষণা। এটি একটি ফেরত প্রকারের সাথে এবং কোন পরামিতি সহ সংজ্ঞায়িত করা হবে:

    int main(void) { /* ... */ } 

    অথবা দুইটি পরামিতি (এখানে আর্গাক এবং আরার্ভ হিসাবে উল্লেখ করা হয়েছে, যদিও কোনও নাম ব্যবহার করা যেতে পারে, যেহেতু তারা যে ফাংশনটি ঘোষিত হয় তার জন্য স্থানীয়):

    int main(int argc, char *argv[]) { /* ... */ }

    বা সমতুল্য; 9) বা অন্য কিছু বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে।

  4. ইন্টারন্যাশনাল স্ট্যান্ডার্ডের জন্য রেশনেল - প্রোগ্রামিং ভাষা - সি, রিভিশন 5.10। 5.1.2.2 হোস্টেড পরিবেশ -> 5.1.2.2.1 প্রোগ্রাম স্টার্টআপ

    মূলত আর্গুমেন্টের আচরণ এবং প্রস্থানের মিথস্ক্রিয়া, প্রধান এবং অস্থিরতার (§7.20.4.2 দেখুন) ARV স্ট্রিংগুলির প্রতিনিধিত্বে কিছু অবাঞ্ছিত বৈচিত্রকে নিয়ন্ত্রণ করার জন্য এবং মূল দ্বারা প্রদত্ত মানগুলির অর্থকে সংহত করার জন্য কোডায়িত করা হয়েছে।

    প্রধানে আর্গুমেন্ট হিসাবে argc এবং argv এর স্পেসিফিকেশন ব্যাপক পূর্ব অনুশীলন স্বীকৃত। argv [argc] তালিকার শেষের জন্য একটি অনাদায়ী চেক প্রদানের জন্য একটি সাধারণ পয়েন্টার হতে হবে, সাধারণ অনুশীলনের ভিত্তিতেও।

    প্রধান একমাত্র ফাংশন যা পোর্টেবল শূন্য বা দুটি আর্গুমেন্ট দিয়ে ঘোষণা করা যেতে পারে। (অন্যান্য ফাংশনগুলির আর্গুমেন্টগুলির সংখ্যা অবশ্যই আহ্বান এবং সংজ্ঞাের মধ্যে অবশ্যই মিলবে।) এই বিশেষ ক্ষেত্রে প্রোগ্রামটি আর্গুমেন্ট স্ট্রিংগুলির অ্যাক্সেস না করার সময় মূলত আর্গুমেন্টগুলিকে ছেড়ে দেওয়ার বিস্তৃত অনুশীলনকে স্বীকৃতি দেয়। যদিও বেশিরভাগ বাস্তবায়ন মূলত দুইটি আর্গুমেন্টকে সমর্থন করে, তবে এই অনুশীলনটি মানদণ্ডের দ্বারা নিয়মিত বা নিষিদ্ধ নয়; তিনটি আর্গুমেন্টের সাথে প্রধান সংজ্ঞা দেয় এমন একটি প্রোগ্রাম কঠোরভাবে সম্মতি দেয় না (§J.5.1 দেখুন।)।

  5. আইএসও 9899: 1999 5.1.2.2 হোস্টেড পরিবেশ -> 5.1.2.2.3 প্রোগ্রাম সমাপ্তি

    প্রধান ফাংশন রিটার্ন টাইপ এক ধরনের int- এ সঙ্গে সামঞ্জস্যপূর্ণ হয়, তাহলে প্রধান ফাংশন প্রাথমিক কল থেকে একটি ফিরতি তার আর্গুমেন্ট হিসাবে প্রধান ফাংশন দ্বারা ফিরে মান প্রস্থান ফাংশন কলিং সমতূল্য; 11) পৌঁছনো }যে বন্ধ প্রধান ফাংশনটি 0 এর একটি মান প্রদান করে। যদি রিটার্ন প্রকারটি int এর সাথে সামঞ্জস্যপূর্ণ না হয় তবে হোস্ট পরিবেশে বাতিল হওয়া স্থিতিটি নির্দিষ্ট নয়।

  6. ISO 9899: 1999 5.1.2.1 ফ্রাইস্ট্যান্ডিং পরিবেশ

    একটি বিনামূল্যের পরিবেশে (কোনও অপারেটিং সিস্টেমের কোনও সুবিধা ছাড়াই সি প্রোগ্রাম কার্যকর হতে পারে), প্রোগ্রাম প্রারম্ভে বলা ফাংশনের নাম এবং ধরন বাস্তবায়ন-সংজ্ঞায়িত।

  7. আইএসও 9899: 2011 5.1.2.2 হোস্টেড পরিবেশ -> 5.1.2.2.1 প্রোগ্রাম স্টার্টআপ

    এই বিভাগটি উপরে উদ্ধৃত C99 এক অনুরূপ।

  8. ISO 9899: 1999 5.1.2.1 ফ্রাইস্ট্যান্ডিং পরিবেশ

    এই বিভাগটি উপরে উদ্ধৃত C99 এক অনুরূপ।

  9. আইএসও 14882: 2003 3.6.1 মুখ্য ফাংশন

    একটি বাস্তবায়ন প্রধান ফাংশন পূর্বনির্ধারিত করা হবে না। এই ফাংশন ওভারলোড করা হবে না। এতে টাইপ int এর একটি রিটার্ন টাইপ থাকবে, তবে অন্যথায় এটির প্রয়োগ বাস্তবায়ন-সংজ্ঞায়িত। সমস্ত বাস্তবায়ন নিম্নলিখিত প্রধান সংজ্ঞা নিম্নলিখিত উভয় অনুমতি দেবে:

    int main() { /* ... */ }

    এবং

    int main(int argc, char* argv[]) { /* ... */ }
  10. আইএসও 14882: 2003 3.6.1 মুখ্য ফাংশন

    এটি বাস্তবায়ন-সংজ্ঞায়িত কিনা একটি বিনামূল্যের পরিবেশে একটি প্রোগ্রাম একটি প্রধান ফাংশন সংজ্ঞায়িত করা প্রয়োজন।

  11. ISO 14882: 2011 3.6.1 মুখ্য ফাংশন

    একটি বাস্তবায়ন প্রধান ফাংশন পূর্বনির্ধারিত করা হবে না। এই ফাংশন ওভারলোড করা হবে না। এতে টাইপ int এর একটি রিটার্ন টাইপ থাকবে, তবে অন্যথায় এটির প্রয়োগ বাস্তবায়ন-সংজ্ঞায়িত। সমস্ত বাস্তবায়ন উভয় অনুমতি দেবে

    - একটি ফাংশন () ফিরে int এবং

    - একটি ফাংশন (int, পয়েন্টার পয়েন্টার পয়েন্টার) ফিরে int

    প্রধান ধরন (8.3.5) হিসাবে।

  12. ISO 14882: 2011 3.6.1 মুখ্য ফাংশন

    এই বিভাগটি উপরের উদ্ধৃত C ++ 03 এর মতো।


Answer #3

কি ফিরে আসা আপনি এক্সিকিউটেবল সঙ্গে কি করতে চান উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনি কমান্ড লাইন শেলের সাহায্যে আপনার প্রোগ্রামটি ব্যবহার করেন তবে সফলতার জন্য আপনাকে 0 টি ফেরত দিতে হবে এবং ব্যর্থতার জন্য শূন্য নয়। তারপর আপনি আপনার কোডের ফলাফলের উপর নির্ভর করে শর্তসাপেক্ষ প্রক্রিয়াকরণ সহ শেলগুলিতে প্রোগ্রামটি ব্যবহার করতে পারবেন। এছাড়াও আপনি আপনার ব্যাখ্যা অনুসারে কোনও অজারজার মান নির্ধারণ করতে পারেন, উদাহরণস্বরূপ জটিল ত্রুটির জন্য বিভিন্ন প্রোগ্রাম প্রস্থান পয়েন্টগুলি বিভিন্ন প্রস্থান মানের সাথে একটি প্রোগ্রাম বন্ধ করে দিতে পারে এবং কলিং শেলের জন্য উপলব্ধ যা মূল্যের পরিদর্শন করে কী করতে হবে তা নির্ধারণ করতে পারে। যদি কোডটি শেলগুলির সাথে ব্যবহার করার উদ্দেশ্যে না এবং ফেরত মানটি কাউকে বিরক্ত না করে তবে এটি বাদ দেওয়া যেতে পারে। আমি ব্যক্তিগতভাবে স্বাক্ষর ব্যবহারint main (void) { .. return 0; .. }


Answer #4

মনে রাখবেন, যদিও আপনি কোনও int ফিরে আসছেন, তবে কিছু OSes (উইন্ডোজ) ফেরত মানটি একক বাইটে (0-255) ছিন্ন করে।


Answer #5

আমি মনে করিয়ে দিয়েছি যে স্ট্যান্ডার্ডটি নির্দিষ্ট করে যে মুখ্যটির ফেরত মূল্যের প্রয়োজন নেই, সফলভাবে ফেরত পাওয়ার জন্য ওএস ভিত্তিক ছিল (একের মধ্যে শূন্য সাফল্য হতে পারে অথবা অন্য কোনও ব্যর্থতা হতে পারে), সুতরাং প্রত্যাবর্তনের অভাবে এটির জন্য একটি ক্যু ছিল সফল রিটার্ন নিজেই প্রবেশ করতে কম্পাইলার।

তবে আমি সাধারণত 0 ফিরে।


Answer #6

সি ++ এ প্রধান ফাংশনটিকে int main () হিসাবে ঘোষণা করা উচিত এবং বাতিল নয় () মূলত কম্পাইলার হিসাবে অকার্যকর প্রধান ক্ষেত্রে ক্ষেত্রে একটি ত্রুটি ফেলে। প্রধান ফাংশন int প্রধান (int k, int l, int arr []) বা int প্রধান (অকার্যকর) মত কোনও আর্গুমেন্ট নিতে পারে।

#include <iostream>
using namespace std;

int main(void) {
    // your code goes here
    cout<<"a";
    return 0;
}

আউটপুট:

Success #stdin #stdout 0s 4416KB
a

রিটার্ন অংশে আসার জন্য এটি শুধুমাত্র 0 টি ফেরত দিতে হবে অন্যথায় কম্পাইলার একটি ত্রুটি ছুঁড়ে ফেলে। উদাহরণস্বরূপ, যদি আপনি 1 ফিরে যান তবে আপনি পছন্দসই আউটপুট পাবেন তবে এটি একটি রানটাইম ত্রুটিও ছুঁড়ে ফেলে।

উদাহরণ

#include <iostream>
using namespace std;

int main(int k,float m,char g, int arr[]) {
    // your code goes here
    k=0;
    cout<<k;
    g='a';
    cout<<g;
    cout<<"a";
    return 1;
}

আউটপুট:

Runtime error   #stdin #stdout 0s 4448KB
0aa

Answer #7

main() C89 এবং K & R C তে নির্ধারিত ফেরত ধরন ডিফল্ট 'int` তে।

return 1? return 0?
  1. আপনি যদি কোনও রিটার্ণ স্টেটমেন্ট লিখেন না int main(), তবে {ডিফল্টভাবে ক্লোজিং 0 প্রদান করবে।

  2. return 0বা return 1অভিভাবক প্রক্রিয়া দ্বারা প্রাপ্ত হবে। একটি শেলের মধ্যে এটি একটি শেল ভেরিয়েবলে যায় এবং আপনি যদি আপনার প্রোগ্রামটি শেল গঠন করেন এবং সেই পরিবর্তনশীল ব্যবহার না করেন তবে আপনাকে ফেরতের মান সম্পর্কে চিন্তা করতে হবে না main()

দেখুন কীভাবে আমার প্রধান ফাংশনটি ফেরত এসেছে? ।

$ ./a.out
$ echo $?

এই ভাবে আপনি দেখতে পারেন যে এটি একটি পরিবর্তনশীল $?যা ফেরত মানের অন্তত উল্লেখযোগ্য বাইট পায় main()

ইউনিক্স এবং ডস স্ক্রিপ্টিংয়ে, return 0সফলতার জন্য এবং অ-শূন্যতার জন্য ত্রুটিগুলি সাধারণত ফিরে আসে। এটি আপনার প্রোগ্রামের সাথে কী ঘটেছে এবং সমগ্র প্রবাহ নিয়ন্ত্রণ করার জন্য এটি ইউনিক্স এবং ডস স্ক্রিপ্টিং দ্বারা ব্যবহৃত মান।


Answer #8

রিটার্ন মান main()দেখায় কিভাবে প্রোগ্রামটি ছাড়িয়ে গেছে। যদি ফিরতি মানটি zeroঅর্থাত্ কার্যকর হয় তবে মৃত্যুদন্ড সফল হয়েছে যখন কোনও অ-শূন্য মান প্রতিনিধিত্ব করবে যেটি কার্যকর করার ক্ষেত্রে কিছু খারাপ হয়ে গেছে।


Answer #9

স্ট্যান্ডার্ড সি - হোস্ট পরিবেশ

একটি হোস্টেড পরিবেশের জন্য (যেটি স্বাভাবিক একটি), সি 11 স্ট্যান্ডার্ড (আইএসও / আইইসি 9899: ২011) বলছে:

5.1.2.2.1 প্রোগ্রাম প্রারম্ভ

প্রোগ্রাম প্রারম্ভে বলা ফাংশন main নামকরণ করা হয়। বাস্তবায়ন এই ফাংশন জন্য কোন প্রোটোটাইপ ঘোষণা। এটি একটি ফেরত প্রকারের সাথে এবং কোন পরামিতি সহ সংজ্ঞায়িত করা হবে:

int main(void) { /* ... */ }

অথবা দুইটি পরামিতি (এখানে argc এবং argv হিসাবে উল্লেখ করা হয়েছে, যদিও কোনও নাম ব্যবহার করা যেতে পারে, যেহেতু তারা যে ফাংশনটি ঘোষিত হয় তার জন্য স্থানীয়):

int main(int argc, char *argv[]) { /* ... */ }

বা সমমানের; 10) বা অন্য কিছু বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে।

যদি তারা ঘোষণা করা হয়, প্রধান ফাংশন পরামিতি নিম্নলিখিত সীমাবদ্ধতা মেনে চলবে:

  • argc মান nonnegative হতে হবে।
  • argv[argc] একটি নিল পয়েন্টার হতে হবে।
  • যদি argc এর মান শূন্য থেকে বেশি হয়, অ্যারে সদস্য argv[0] argv[argc-1] সহ সমেত সমেত স্ট্রিংগুলির পয়েন্টার ধারণ করবে, যা প্রোগ্রাম স্টার্টআপের আগে হোস্ট পরিবেশের দ্বারা বাস্তবায়ন-সংজ্ঞায়িত মান দেওয়া হয়। অভিপ্রায় হোস্ট পরিবেশে অন্য কোথাও থেকে প্রোগ্রাম প্রারম্ভের পূর্বে নির্ধারিত প্রোগ্রাম তথ্য সরবরাহ করা হয়। হোস্ট এনভায়রনমেন্ট বড় হাতের অক্ষর এবং ছোট হাতের উভয় অক্ষর দিয়ে স্ট্রিং সরবরাহ করতে সক্ষম না হলে বাস্তবায়ন নিশ্চিত করা হবে যে ছোট হাতের অক্ষরে স্ট্রিংগুলি পাওয়া যায়।
  • যদি argc এর মান শূন্যের থেকে বেশি হয়, তবে স্ট্রিংটি argg দ্বারা নির্দেশিত argv[0] প্রোগ্রাম নামটি উপস্থাপন করে; argv[0][0] প্রোগ্রাম নামটি হোস্ট পরিবেশ থেকে উপলব্ধ না হলে নিল চরিত্র হবে। যদি আর argc এর মান একের চেয়ে বেশি হয়, argv[1] মাধ্যমে নির্দেশিত স্ট্রিং argv[argc-1] প্রোগ্রাম পরামিতিগুলিকে প্রতিনিধিত্ব করে।
  • পরামিতি argc এবং argv এবং argv অ্যারের দ্বারা চিহ্নিত স্ট্রিংগুলি প্রোগ্রাম দ্বারা সংশোধনযোগ্য হবে এবং প্রোগ্রাম স্টার্টআপ এবং প্রোগ্রাম সমাপ্তির মধ্যে তাদের শেষ-সংরক্ষিত মানগুলি বজায় রাখবে।

10) এভাবে, int টাইপকৃত টাইপডফ নামের দ্বারা প্রতিস্থাপিত করা যেতে পারে, অথবা argv এর ধরন char **argv হিসাবে লেখা যেতে পারে, ইত্যাদি।

C99 বা C11 প্রোগ্রাম সমাপ্তি

main() থেকে ফেরত মানটি বাস্তবায়ন-সংজ্ঞায়িত ভাবে 'পরিবেশ' এ প্রেরিত হয়।

5.1.2.2.3 প্রোগ্রাম সমাপ্তি

1 main ফাংশনের রিটার্ন টাইপ int সাথে সামঞ্জস্যপূর্ণ একটি টাইপ, প্রাথমিক ফাংশন থেকে প্রাথমিক কল থেকে একটি ফিরতি main ফাংশন দ্বারা তার মান হিসাবে ফেরত মান সহ exit ফাংশন কলিং সমতুল্য হয়; 11) main ফাংশনটি বন্ধ করে দেয় এমন } পৌঁছানোর } 0. একটি মান প্রদান করে। যদি রিটার্ন প্রকারটি int সাথে সামঞ্জস্যপূর্ণ না হয় তবে হোস্ট পরিবেশে বাতিল হওয়া স্থিতিটি নির্দিষ্ট নয়।

11) 6.2.4 অনুযায়ী, main স্টোরেজ সময়কালের সাথে বস্তুর জীবনযাত্রার মেয়াদ শেষের দিকে শেষ হয়ে যাবে, এমনকি তারা পরবর্তীতে নাও থাকতে পারে।

উল্লেখ্য যে 0 'সাফল্যের' হিসাবে বাধ্যতামূলক। আপনি যদি পছন্দ করেন তবে আপনি <stdlib.h> থেকে EXIT_FAILURE এবং EXIT_SUCCESS ব্যবহার করতে পারেন, কিন্তু 0 টি ভালভাবে প্রতিষ্ঠিত, এবং তাই 1. এছাড়াও 255 এর চেয়েও বেশি প্রস্থান কোড দেখুন - সম্ভব?

C89 (এবং সেইজন্য মাইক্রোসফ্ট সি-তে), main() ফাংশন ফেরত থাকলে কিন্তু ফেরত মান নির্দিষ্ট করে না সে সম্পর্কে কোনও বিবৃতি নেই; এটা অনির্ধারিত আচরণ বাড়ে।

7.22.4.4 exit ফাংশন

¶5 অবশেষে, হোস্ট পরিবেশে কন্ট্রোলটি ফেরত পাঠানো হয়। status মানটি শূন্য বা EXIT_SUCCESS , তাহলে EXIT_SUCCESS সংজ্ঞায়িত ফর্মটি সফল সমাপ্তি ফেরত EXIT_SUCCESS হয়। status মান EXIT_FAILURE , EXIT_FAILURE একটি বাস্তবায়ন-সংজ্ঞায়িত ফর্ম ব্যর্থ ব্যর্থতা ফেরত EXIT_FAILURE হয়। অন্যথায় ফিরে দেওয়া অবস্থা বাস্তবায়ন-সংজ্ঞায়িত।

স্ট্যান্ডার্ড সি ++ - হোস্ট পরিবেশ

সি ++ 11 স্ট্যান্ডার্ড (আইএসও / আইইসি 1488২: 2011) বলেছেন:

3.6.1 মুখ্য ফাংশন [basic.start.main]

¶1 একটি প্রোগ্রামের প্রধান নামক একটি বিশ্বব্যাপী ফাংশন থাকতে হবে, যা প্রোগ্রামটির নামযুক্ত শুরু। [...]

¶2 একটি বাস্তবায়ন প্রধান ফাংশন পূর্বনির্ধারিত করা হবে না। এই ফাংশন ওভারলোড করা হবে না। এটি টাইপ int এর একটি রিটার্ন টাইপ থাকবে তবে অন্যথায় এটির ধরন বাস্তবায়ন সংজ্ঞায়িত। সমস্ত বাস্তবায়ন নিম্নলিখিত প্রধান সংজ্ঞা নিম্নলিখিত উভয় অনুমতি দেবে:

int main() { /* ... */ }

এবং

int main(int argc, char* argv[]) { /* ... */ }

পরের ফর্মের মধ্যে argc প্রোগ্রামটি চালানো পরিবেশের প্রোগ্রাম থেকে পাস করা আর্গুমেন্ট সংখ্যা হবে। যদি argc nonzero হয় তবে এই আর্গুমেন্টগুলি argv[0]argv[argc-1] এর মাধ্যমে নল-টার্মিন্ড মাল্টিবিট স্ট্রিং (NTMBS) (17.5.2.1.4.2) এবং argv[0] এর প্রাথমিক অক্ষরগুলির পয়েন্টার হিসাবে সরবরাহ করা হবে। একটি এনটিএমবিএসের প্রাথমিক চরিত্রের পয়েন্টার যা প্রোগ্রামটি বা "" argc মান অ-নেতিবাচক হতে হবে। argv[argc] এর মান 0 হবে। [দ্রষ্টব্য: এটি প্রস্তাবিত যে আরগ (optional) পরামিতিগুলি argv পরে যোগ করা হবে। নোট লিখুন]

¶3 main কার্যটি একটি প্রোগ্রামের মধ্যে ব্যবহার করা হবে না। প্রধান সংযোগ (3.5) বাস্তবায়ন-সংজ্ঞায়িত। [...]

¶5 মূলত একটি ফিরতি বিবৃতির মূল কার্যটি (স্বয়ংক্রিয় সঞ্চয় সময়কাল সহ কোনও বস্তুকে ধ্বংস করা) এবং আর্গুমেন্ট হিসাবে ফেরত মানের সাথে std::exit কল করার প্রভাব রয়েছে। কন্ট্রোলটি ফেরত আসা ছাড়া প্রধানের শেষে পৌঁছে গেলে প্রভাবটি কার্যকর করা হয়

return 0;

C ++ মানটি স্পষ্টভাবে বলে যে "এটি [প্রধান ফাংশন] টাইপ int এর একটি রিটার্ন টাইপ থাকবে তবে অন্যথায় এটির ধরন বাস্তবায়ন সংজ্ঞায়িত", এবং বিকল্পগুলির জন্য সমর্থিত সি স্ট্যান্ডার্ড হিসাবে একই দুটি স্বাক্ষর প্রয়োজন। সুতরাং একটি 'অকার্যকর প্রধান ()' সরাসরি C ++ মান দ্বারা অনুমোদিত নয়, যদিও বিকল্পগুলি অনুমোদিত নয় এমন একটি আদর্শ-কার্যকর বাস্তবায়ন বন্ধ করার জন্য এটি কিছুই করতে পারে না। উল্লেখ্য যে সি ++ ব্যবহারকারীকে কলিং থেকে নিষিদ্ধ করে (কিন্তু সি মানটি নয়)।

§18.5 এর একটি অনুচ্ছেদ সি ++ 11 স্টাডিতে শুরু এবং সমাপ্তি যা §7.22.4.4 থেকে অনুচ্ছেদের সমান, যা একটি সিটি 11 মান (উপরে উদ্ধৃত) এর exit ফাংশন , যা একটি পাদটীকা ছাড়াও (যা কেবলমাত্র EXIT_SUCCESS এবং নথির সাথে ডকুমেন্টস করে EXIT_SUCCESS EXIT_FAILURE <cstdlib> সংজ্ঞায়িত করা হয়েছে)।

স্ট্যান্ডার্ড সি - প্রচলিত এক্সটেনশান

ক্লাসিক্যালি, ইউনিক্স সিস্টেম একটি তৃতীয় সংস্করণ সমর্থন করে:

int main(int argc, char **argv, char **envp) { ... }

তৃতীয় যুক্তি হল বিন্দুগুলির পয়েন্টারগুলির একটি নল-সমাপ্ত তালিকা, যা প্রতিটি একটি পরিবেশগত পরিবর্তনশীল যার একটি নাম, সমান চিহ্ন এবং একটি মান (সম্ভবত খালি) রয়েছে। আপনি যদি এটি ব্যবহার না করেন তবে আপনি এখনও ' extern char **environ; পরিবেশের মাধ্যমে পরিবেশে পেতে পারেন extern char **environ; '। দীর্ঘদিন ধরে, এটির <unistd.h> ঘোষণা করে এমন কোন শিরোনাম নেই, তবে POSIX 2008 মানদণ্ডটি এখন <unistd.h> ঘোষণা করা প্রয়োজন।

এটি সি স্ট্যান্ডার্ড দ্বারা একটি সাধারণ এক্সটেনশান হিসাবে স্বীকৃত, আনক্সে জেতে নথিভুক্ত করা হয়েছে:

J.5.1 পরিবেশ আর্গুমেন্ট

¶1 হোস্টেড পরিবেশে, প্রধান ফাংশনটি একটি তৃতীয় যুক্তি প্রাপ্ত করে, char *envp[] , যা পয়েন্টারগুলির নল-বিন্যস্ত অ্যারেকে char *envp[] নির্দেশ করে, যা প্রতিটি একটি স্ট্রিংকে নির্দেশ করে যা এই নির্বাহের জন্য পরিবেশ সম্পর্কে তথ্য সরবরাহ করে প্রোগ্রামের (5.1.2.2.1)।

মাইক্রোসফ্ট সি

মাইক্রোসফ্ট ভিএস 2010 কম্পাইলার আকর্ষণীয়। ওয়েব সাইট বলেছেন:

প্রধান জন্য ঘোষণা সিনট্যাক্স হয়

 int main();

অথবা, বিকল্পভাবে,

int main(int argc, char *argv[], char *envp[]);

অন্যথায়, main এবং wmain ফাংশনগুলি প্রত্যাবর্তন void (কোন ফেরত মান) হিসাবে ঘোষণা করা যেতে পারে। যদি আপনি প্রত্যাবর্তন বাতিল হিসাবে main বা wmain ঘোষণা করেন, আপনি ফেরত বিবৃতি ব্যবহার করে অভিভাবক প্রক্রিয়া বা অপারেটিং সিস্টেম থেকে প্রস্থান কোডটি ফেরত দিতে পারবেন না। main বা wmain void হিসাবে ঘোষণা করা হয় যখন একটি প্রস্থান কোড ফিরে, আপনি exit ফাংশন ব্যবহার করতে হবে।

যখন কোনও প্রোগ্রামটি void main() ছাড়াই প্রস্থান করে - এবং এমএস ওয়েব সাইটটিও নীরব থাকে তখন কি ঘটে তা আমার কাছে স্পষ্ট নয় (কি প্রস্থান কোড পিতামাতার বা OS তে ফিরে আসে)।

মজার ব্যাপার হল, এমএস দুটি main() সি এবং সি ++ মানগুলির প্রয়োজনের দুটি আর্গুমেন্ট সংস্করণ নির্ধারণ করে না। এটি শুধুমাত্র তিনটি যুক্তি ফর্ম নির্ধারণ করে যেখানে তৃতীয় যুক্তি হল char **envp , পরিবেশের ভেরিয়েবলগুলির একটি তালিকাতে একটি পয়েন্টার।

মাইক্রোসফ্ট পৃষ্ঠায় কিছু অন্যান্য বিকল্পও রয়েছে - wmain() যা বিস্তৃত ক্যারেক্টার স্ট্রিং এবং আরও কিছু নেয়।

এই পৃষ্ঠার মাইক্রোসফ্ট Visual Studio 2005 সংস্করণটি void main() হিসাবে void main() কে তালিকাভুক্ত করে না। মাইক্রোসফ্ট Visual Studio 2008 এর versions পরবর্তীতে।

স্ট্যান্ডার্ড সি - Freestanding পরিবেশ

হিসাবে প্রথম দিকে উল্লেখ করা, উপরে প্রয়োজনীয়তা হোস্ট পরিবেশে প্রযোজ্য। যদি আপনি একটি স্বতন্ত্র পরিবেশের সাথে কাজ করছেন (যা একটি হোস্টেড পরিবেশের বিকল্প), তাহলে মানদন্ড বলতে অনেক কম। একটি বিনামূল্যের পরিবেশের জন্য, প্রোগ্রাম প্রারম্ভে বলা ফাংশনটির main বলা হয় না এবং তার রিটার্ন প্রকারের কোনও বাধা নেই। স্ট্যান্ডার্ড বলছে:

5.1.2 নির্বাহ পরিবেশ

দুটি কার্যকর পরিবেশ সংজ্ঞায়িত করা হয়: ফ্রিস্ট্যান্ডিং এবং হোস্ট করা। উভয় ক্ষেত্রে, প্রোগ্রাম স্টার্টআপ সঞ্চালিত হয় যখন একটি নির্দিষ্ট সি ফাংশন নির্বাহ পরিবেশ দ্বারা বলা হয়। স্ট্যাটিক স্টোরেজ স্থিতির সাথে সমস্ত বস্তুগুলি শুরু হওয়ার আগে (তাদের প্রাথমিক মানগুলিতে সেট করা) শুরু করা হবে। যেমন প্রবর্তনের পদ্ধতি এবং সময় অন্যথায় অনির্দিষ্ট হয়। প্রোগ্রাম অবসান ফিরতি পরিবেশ নিয়ন্ত্রণ।

5.1.2.1 ফ্রাইস্ট্যান্ডিং পরিবেশ

একটি বিনামূল্যের পরিবেশে (কোনও অপারেটিং সিস্টেমের কোনও সুবিধা ছাড়াই সি প্রোগ্রাম কার্যকর হতে পারে), প্রোগ্রাম প্রারম্ভে বলা ফাংশনের নাম এবং ধরন বাস্তবায়ন-সংজ্ঞায়িত। কোনও লাইব্রেরির সুবিধাগুলি ফ্রিল্যান্সিং প্রোগ্রামে উপলব্ধ, ক্লোজ 4 দ্বারা প্রয়োজনীয় সর্বনিম্ন সেট ছাড়া বাস্তবায়ন-সংজ্ঞায়িত।

একটি বিনামূল্যের পরিবেশে প্রোগ্রাম সমাপ্তির প্রভাব বাস্তবায়ন-সংজ্ঞায়িত।

ধারা 4 কনফর্মেন্সের ক্রস-রেফারেন্স এই প্রসঙ্গে উল্লেখ করে:

¶5 কঠোরভাবে কনফর্মিং প্রোগ্রামটি এই আন্তর্জাতিক স্ট্যান্ডার্ডে নির্দিষ্ট ভাষা এবং লাইব্রেরীর বৈশিষ্ট্যগুলি ব্যবহার করবে। 3) এটি কোন নির্দিষ্ট, অনির্ধারিত, বা বাস্তবায়ন-সংজ্ঞায়িত আচরণের উপর নির্ভরশীল আউটপুট উত্পাদন করবে না এবং কোনও সর্বনিম্ন বাস্তবায়ন সীমা অতিক্রম করবে না।

¶6 রূপান্তর বাস্তবায়ন দুটি ফর্ম হোস্ট এবং freestanding হয় । একটি conforming হোস্ট করা বাস্তবায়ন কোন কঠোরভাবে conforming প্রোগ্রাম গ্রহণ করা হবে। একটি কনফরমিং ফ্রিস্ট্যান্ডিং বাস্তবায়ন কোন কঠোরভাবে কনফর্মিং প্রোগ্রাম গ্রহণ করবে যা লাইব্রেরী ক্লায়েন্টে উল্লেখিত বৈশিষ্ট্যগুলির (ধারা 7) মানদণ্ড <float.h> , <iso646.h> , <limits.h> , <stdalign.h> , <stdarg.h> , <stdbool.h> , <stddef.h> , <stdint.h> এবং <stdnoreturn.h> । একটি কনফর্মিং বাস্তবায়ন এক্সটেনশান থাকতে পারে (অতিরিক্ত লাইব্রেরি ফাংশন সহ), যদি তারা কোন কঠোরভাবে কনফর্মিং প্রোগ্রামের আচরণ পরিবর্তন করে না। 4)

¶7 একটি কনফর্মিং প্রোগ্রাম একটি conforming বাস্তবায়ন গ্রহণযোগ্য হয়। 5)

3) একটি কঠোরভাবে কনফর্মিং প্রোগ্রাম শর্তযুক্ত বৈশিষ্ট্যগুলি ব্যবহার করতে পারে (দেখুন 6.10.8.3) তবে ব্যবহারের ম্যাক্রো ব্যবহার করে একটি যথাযথ শর্তাধীন অন্তর্ভুক্তি প্রপ্রোকাসিং নির্দেশিকা দ্বারা সুরক্ষিত থাকে। উদাহরণ স্বরূপ:

#ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
    /* ... */
    fesetround(FE_UPWARD);
    /* ... */
#endif

4) এর অর্থ এই যে একটি রূপান্তর বাস্তবায়ন এই ইন্টারন্যাশনাল স্ট্যান্ডার্ডে স্পষ্টভাবে সংরক্ষিত ছাড়া অন্য কোন সনাক্তকারী সংরক্ষণ করে।

5) কঠোরভাবে conforming প্রোগ্রাম বাস্তবায়ন conforming মধ্যে সর্বাধিক পোর্টেবল হতে উদ্দেশ্যে করা হয়। কনফর্মিং প্রোগ্রাম একটি conforming বাস্তবায়ন অ পোর্টেবল বৈশিষ্ট্য উপর নির্ভর করে হতে পারে।

এটি হ'ল লক্ষনীয় যে কোনও ফাংশনটি যে কোনও ফাংশনকে সংজ্ঞায়িত করে এমন একমাত্র হেডারের জন্য কেবলমাত্র শিরোনাম <stdarg.h> (এবং <stdarg.h> হতে পারে - এবং প্রায়শই - কেবল ম্যাক্রো)।

স্ট্যান্ডার্ড সি ++ - ফ্রাইস্ট্যান্ডিং পরিবেশ

যেমন সি স্ট্যান্ডার্ড উভয় হোস্টেড এবং ফ্রিস্ট্যান্ডিং পরিবেশকে স্বীকৃতি দেয়, তেমনই সি ++ মানটিও থাকে। (আইএসও / আইইসি 1488২: ২011 থেকে উদ্ধৃতি।)

1.4 বাস্তবায়ন সম্মতি [intro.compliance]

¶7 দুটি ধরণের বাস্তবায়ন সংজ্ঞায়িত করা হয়েছে: একটি হোস্ট করা বাস্তবায়ন এবং একটি বিনামূল্যের বাস্তবায়ন । একটি হোস্ট করা বাস্তবায়ন জন্য, এই আন্তর্জাতিক মান উপলব্ধ লাইব্রেরি সেট সংজ্ঞায়িত। একটি ফ্রিস্ট্যান্ডিং বাস্তবায়ন এমন এক যা অপারেটিং সিস্টেমের সুবিধা ছাড়াই সঞ্চালিত হতে পারে এবং এতে লাইব্রেরির বাস্তবায়ন-সংজ্ঞায়িত সেট রয়েছে যার মধ্যে কিছু ভাষা-সহায়তা লাইব্রেরি (17.6.1.3) অন্তর্ভুক্ত রয়েছে।

¶8 একটি কনফার্মিং বাস্তবায়নের এক্সটেনশান থাকতে পারে (অতিরিক্ত লাইব্রেরি ফাংশন সহ), যদি তারা কোনও সুসংগঠিত প্রোগ্রামের আচরণ পরিবর্তন করে না। এই ইন্টারন্যাশনাল স্ট্যান্ডার্ড অনুযায়ী দুর্ব্যবহার করা এমন এক্সটেনশানগুলি ব্যবহার করে এমন প্রোগ্রামগুলির নির্ণয় করার জন্য বাস্তবায়ন প্রয়োজন। তাই করা, তবে, তারা যেমন প্রোগ্রাম কম্পাইল এবং নির্বাহ করতে পারেন।

¶9 প্রতিটি বাস্তবায়নের মধ্যে ডকুমেন্টেশন অন্তর্ভুক্ত থাকবে যা সমস্ত শর্তাধীন সমর্থিত গঠনগুলিকে সনাক্ত করে যা এটি সমস্ত স্থানীয়-নির্দিষ্ট বৈশিষ্ট্যগুলিকে সমর্থন করে না এবং সংজ্ঞায়িত করে না। 3

3) এই ডকুমেন্টেশন বাস্তবায়ন-সংজ্ঞায়িত আচরণ সংজ্ঞায়িত করে; দেখুন 1.9।

17.6.1.3 ফ্রাইস্ট্যান্ডিং বাস্তবায়ন [সম্মতি]

দুটি ধরণের বাস্তবায়ন সংজ্ঞায়িত করা হয়েছে: হোস্টেড এবং ফ্রিস্ট্যান্ডিং (1.4)। একটি হোস্ট করা বাস্তবায়ন জন্য, এই আন্তর্জাতিক স্ট্যান্ডার্ড উপলব্ধ শিরোনাম সেট বর্ণনা করে।

একটি freestanding বাস্তবায়ন হেডারের একটি বাস্তবায়ন সংজ্ঞায়িত সেট আছে। এই সেটটিতে কমপক্ষে শীর্ষক শিরোনামে 16 টি শিরোনাম প্রদর্শিত হবে।

হেডারের সরবরাহিত সংস্করণ <cstdlib> অন্তত ফাংশন abort , atexit , at_quick_exit , exit , এবং quick_exit (18.5) ঘোষণা করবে। এই টেবিলে তালিকাবদ্ধ অন্যান্য শিরোনাম হোস্ট করা বাস্তবায়ন হিসাবে একই প্রয়োজনীয়তা পূরণ করবে।

সারণি 16 - ফ্রিস্ট্যান্ডিং বাস্তবায়নের জন্য সি ++ হেডার

Subclause                           Header(s)
                                    <ciso646>
18.2  Types                         <cstddef>
18.3  Implementation properties     <cfloat> <limits> <climits>
18.4  Integer types                 <cstdint>
18.5  Start and termination         <cstdlib>
18.6  Dynamic memory management     <new>
18.7  Type identification           <typeinfo>
18.8  Exception handling            <exception>
18.9  Initializer lists             <initializer_list>
18.10 Other runtime support         <cstdalign> <cstdarg> <cstdbool>
20.9  Type traits                   <type_traits>
29    Atomics                       <atomic>

সি মধ্যে int main() ব্যবহার সম্পর্কে কি?

C11 স্ট্যান্ডার্ডের মান §5.1.2.2.1 পছন্দের নোটটি - int main(void) দেখায় - কিন্তু মানতে দুটি উদাহরণ রয়েছে যা int main() : §6.5.3.4 ¶8 এবং §6.7.6.3 দেখায় ¶20 । এখন, এটি গুরুত্বপূর্ণ যে উদাহরণগুলি 'আদর্শগত' নয়; তারা শুধুমাত্র illustrative হয়। উদাহরণস্বরূপ বাগ থাকলে, তারা সরাসরি মূল পাঠ্যকে প্রভাবিত করবে না। যে বলেন, তারা প্রত্যাশিত আচরণের জোরালোভাবে নির্দেশক, তাই যদি মানটি একটি উদাহরণে int main() অন্তর্ভুক্ত করে তবে এটি পরামর্শ দেয় যে int main() নিষিদ্ধ নয়, এমনকি যদি এটি পছন্দসই নোট নাও থাকে।

6.5.3.4 সাইজ এবং _Alignof অপারেটর

...

EX8 উদাহরণ 3 এই উদাহরণে, একটি পরিবর্তনশীল দৈর্ঘ্য অ্যারের আকার গণনা করা হয় এবং একটি ফাংশন থেকে ফেরত দেওয়া হয়:

#include <stddef.h>

size_t fsize3(int n)
{
    char b[n+3]; // variable length array
    return sizeof b; // execution time sizeof
}
int main()
{
    size_t size;
    size = fsize3(10); // fsize3 returns 13
    return 0;
}

Answer #10

প্রোগ্রামটি বন্ধ কীভাবে তা পরীক্ষা করার জন্য অপারেটিং সিস্টেম দ্বারা ফেরত মানটি ব্যবহার করা যেতে পারে।

রিটার্ন মান 0 সাধারণত বেশিরভাগ অপারেটিং সিস্টেমে ঠিক থাকে (যেগুলি আমি যাইহোক মনে করতে পারি)।

যখন আপনি নিজেকে একটি প্রক্রিয়া কল করেন তখন এটিও চেক করা যেতে পারে এবং প্রোগ্রামটির বাইরে চলে যাওয়া এবং সঠিকভাবে সমাপ্ত কিনা তা দেখুন।

এটা না শুধু একটি প্রোগ্রামিং কনভেনশন।


Answer #11

সাফল্য 0 এবং ত্রুটি জন্য অ শূন্য ফিরে 0। এটি আপনার প্রোগ্রামের সাথে কী ঘটেছে তা জানতে ইউনিক্স এবং ডস স্ক্রিপ্টিং দ্বারা ব্যবহৃত মান।


Answer #12

যদি আপনার কাছে কোনও প্রক্রিয়া থেকে পূর্ণসংখ্যা ফেরত দেওয়ার কার্যকারিতা সম্পর্কিত সমস্যা থাকে, তবে সম্ভবত আপনি এই প্রক্রিয়াটি কল করতে এড়াতে পারবেন না যে এই প্রত্যাবর্তন মানটি একটি সমস্যা হয়ে ওঠে।

যদি আপনি এটি করছেন (বহুবার একটি প্রক্রিয়া কল করুন), তখন আপনার কলিকে সরাসরি আপনার কলিকরের অভ্যন্তরে, অথবা একটি DLL ফাইলে আপনার কলিকে প্রতিটি কলটির জন্য একটি নির্দিষ্ট প্রক্রিয়া বরাদ্দ করার উপায় খুঁজে বের করতে হবে; একাধিক প্রক্রিয়া বরাদ্দ আপনি এই ক্ষেত্রে প্রাসঙ্গিক দক্ষতা সমস্যা আনতে।

বিস্তারিতভাবে, যদি আপনি শুধুমাত্র জানতে চান যে 0 ফেরত চেয়ে ফিরে যাওয়া কম বা কম দক্ষ, তবে এটি কিছু ক্ষেত্রে কম্পাইলারের উপর নির্ভর করে, তবে সাধারণভাবে, তারা একই উৎস (স্থানীয়, ক্ষেত্র, ধ্রুবক, এমবেডেড) কোড, ফাংশন ফলাফল, ইত্যাদি) এটি ঘড়ির চক্রের ঠিক একই সংখ্যা প্রয়োজন।


Answer #13

গ্রহণযোগ্য উত্তর C ++ এর জন্য লক্ষ্য করা যায় বলে মনে হচ্ছে, তাই আমি মনে করি আমি সি সম্পর্কিত একটি উত্তর যোগ করব, এবং এটি কয়েকটি উপায়ে ভিন্ন।

আইএসও / আইইসি 9899: 1989 (সি 90):

main() উভয় হিসাবে ঘোষণা করা উচিত:

int main(void)
int main(int argc, char **argv)

বা সমমানের. উদাহরণস্বরূপ, int main(int argc, char *argv[]) দ্বিতীয়টির সমান। উপরন্তু, এটি ডিফল্ট হিসাবে int ফেরত টাইপ বাদ দেওয়া যেতে পারে।

যদি কোন বাস্তবায়ন এটির অনুমতি দেয় তবে main() অন্য উপায়ে ঘোষণা করা যেতে পারে তবে এটি প্রোগ্রাম বাস্তবায়নকে সংজ্ঞায়িত করে এবং কঠোরভাবে সম্মতি দেয় না।

মানটি তিনটি মানকে সংজ্ঞায়িত করে যা কঠোরভাবে রূপান্তরিত হয় (অর্থাৎ, বাস্তবায়ন সংজ্ঞায়িত আচরণের উপর নির্ভর করে না): 0 এবং সফল সমাপ্তির জন্য EXIT_FAILURE , এবং একটি ব্যর্থ সমাপ্তির জন্য EXIT_FAILURE । অন্য কোন মান অ-মান এবং বাস্তবায়ন সংজ্ঞায়িত করা হয়। main() অনির্ধারিত আচরণ এড়াতে শেষে একটি সুস্পষ্ট return বিবৃতি থাকতে হবে।

অবশেষে, একটি প্রোগ্রাম থেকে কলিং main() মানক দৃষ্টিকোণ থেকে কোনও ভুল নেই।

আইএসও / আইইসি 9899: 1999 (সি 99):

সি 99 এর জন্য, সবকিছুই উপরের হিসাবে একই:

  • int রিটার্ন টাইপ বাদ দেওয়া যাবে না।
  • আপনি main() থেকে ফিরে বিবৃতি বাদ দিতে পারেন। যদি আপনি করেন, এবং main() সমাপ্ত হয়, একটি নিখুঁত return 0

Answer #14

C এবং C ++ - int main () বা অকার্যকর প্রধান () কেন এবং কেন প্রধান () ফাংশন সংজ্ঞায়িত করার সঠিক (সর্বাধিক কার্যকর) উপায়টি?

যারা শব্দ "(সবচেয়ে দক্ষ)" প্রশ্ন পরিবর্তন না। যতক্ষণ না আপনি একটি বিনামূল্যের পরিবেশে রয়েছেন, সেখানে ঘোষণা করার জন্য সর্বজনীনভাবে সঠিক উপায় রয়েছে main()এবং এটি পুনরায় int

কি main()সি এবং সি ++ ফিরে উচিত ?

এটা কি উচিত main() আসতে, এটা কি করে main() ফিরে যান। main()অবশ্যই, একটি ফাংশন যে অন্য কেউ কল। আপনি কল কোড যে কোন নিয়ন্ত্রণ নেই main()। অতএব, আপনি main()তার আহ্বানকারী সাথে মেলে একটি টাইপ-সঠিক স্বাক্ষর সঙ্গে ঘোষণা করা আবশ্যক । আপনি কেবল এই বিষয়ে কোন পছন্দ নেই। আপনি নিজেকে জিজ্ঞাসা করতে পারবেন না কম বা কী দক্ষ, বা কী ভাল বা খারাপ শৈলী, বা এরকম কিছু, কারণ উত্তর ইতিমধ্যেই পুরোপুরি ভালভাবে সংজ্ঞায়িত করা হয়েছে, আপনার জন্য C এবং C + মানগুলি। শুধু তাদের অনুসরণ করুন।

যদি int প্রধান () তারপর 1 ফেরত বা 0 ফেরত?

সাফল্যের জন্য 0, ব্যর্থতার জন্য nonzero। আবার, আপনার কোন কিছু (বা পেতে) চয়ন করা হয় না: এটি এমন ইন্টারফেসের দ্বারা সংজ্ঞায়িত করা হয়েছে যা আপনি অনুমিত হতে অনুমিত হচ্ছেন।


Answer #15

main জন্য ফেরত মানটি প্রোগ্রামটি কীভাবে প্রস্থান করে তা নির্দেশ করা উচিত। সাধারণ প্রস্থান সাধারণত main থেকে 0 ফেরত মান দ্বারা প্রতিনিধিত্ব করা হয়। অস্বাভাবিক প্রস্থান সাধারণত একটি অ-শূন্য রিটার্ন দ্বারা সংকেত করা হয়, তবে কোন শূন্য কোড ব্যাখ্যা করা হয় তার জন্য কোন মানদণ্ড নেই। এছাড়াও অন্যদের দ্বারা উল্লিখিত, void main() স্পষ্টভাবে C ++ মান দ্বারা নিষিদ্ধ এবং ব্যবহার করা উচিত নয়। বৈধ C ++ main স্বাক্ষরগুলি হল:

int main()

এবং

int main(int argc, char* argv[])

যা সমতুল্য

int main(int argc, char** argv)

এটি C ++, int main() তে ফেরত মান ছাড়াও বামে রাখা যেতে পারে, যা কোনও পয়েন্টে এটি ফেরত দিতে ডিফল্ট। এটি C99 প্রোগ্রামের সাথেও সত্য। return 0 বাদ দেওয়া উচিত বা বিতর্কের জন্য উন্মুক্ত নয়। বৈধ সি প্রোগ্রাম প্রধান স্বাক্ষর পরিসীমা অনেক বেশী।

এছাড়াও, দক্ষতা main ফাংশন সঙ্গে একটি সমস্যা নয়। সি ++ মান অনুযায়ী এটি শুধুমাত্র প্রবেশ করা যায় এবং একবার চলে যেতে পারে (প্রোগ্রামটির শুরু এবং সমাপ্তি চিহ্নিত করা)। সি এর ক্ষেত্রে, কেসটি ভিন্ন এবং পুনরায় প্রবেশ করানো main() অনুমোদিত, তবে এড়ানো উচিত।





return-type