প্রস্থান () 'রিটার্ন' না করে এমন কোনও বিশেষ কাজ করে?
অস্বাভাবিক প্ল্যাটফর্মগুলির জন্য কয়েকটি সংকলক সহ, exit()
এটির যুক্তিটি আপনার প্রোগ্রামের প্রস্থান মূল্যতে অনুবাদ করতে পারে যখন কোনওর কোনও প্রত্যাবর্তন main()
কেবল কোনও অনুবাদ ছাড়াই হোস্ট পরিবেশে সরাসরি মানটি পাস করে।
স্ট্যান্ডার্ডের ক্ষেত্রে এই ক্ষেত্রে অভিন্ন আচরণের প্রয়োজন হয় (বিশেষত, এটি বলে যে এমন কিছু int
থেকে উপযুক্ত returning যেটি উপযুক্ত returning মানটির main()
সাথে কল করার সমতুল্য হওয়া উচিত exit()
) সমস্যাটি হ'ল প্রস্থান মানগুলি ব্যাখ্যা করার জন্য বিভিন্ন ওএসের বিভিন্ন কনভেনশন রয়েছে। অনেকগুলি (বহু!) সিস্টেমে 0 এর অর্থ সাফল্য এবং অন্য যে কোনও কিছুই ব্যর্থতা। তবে, বলুন, ভিএমএস, বিজোড় মানগুলির অর্থ সাফল্য এবং এমনকি এর অর্থ ব্যর্থতা। আপনি যদি 0 থেকে ফিরে এসেছেন তবে main()
কোনও ভিএমএস ব্যবহারকারী অ্যাক্সেস লঙ্ঘনের বিষয়ে একটি বাজে বার্তা দেখতে পাবেন। আসলে অ্যাক্সেস লঙ্ঘন হয়নি - এটি কেবলমাত্র ব্যর্থতা কোড 0 এর সাথে যুক্ত স্ট্যান্ডার্ড বার্তা ছিল।
তারপরে এএনএসআই এসেছিল এবং আশীর্বাদ করেছে EXIT_SUCCESS
এবং EXIT_FAILURE
যুক্তি হিসাবে আপনি যা করতে পারেন exit()
। স্ট্যান্ডার্ডটি আরও বলে যে এটি exit(0)
একইরকম আচরণ করা উচিত exit(EXIT_SUCCESS)
, তাই বেশিরভাগ বাস্তবায়ন সংজ্ঞায়িত EXIT_SUCCESS
হয় 0
।
স্ট্যান্ডার্ডটি অতএব, আপনাকে ভিএমএসের সাথে আবদ্ধ রাখে, কারণ এটি ব্যর্থতার কোডটি ফিরে পাওয়ার কোনও মান রাখে না যার মান 0 থাকে।
1990-এর দশকের গোড়ার দিকে VAX / VMS C সংকলক এর থেকে রিটার্ন মানটি ব্যাখ্যা করে না main()
, এটি কেবল হোস্ট পরিবেশের জন্য যে কোনও মানই ফিরিয়ে দেয়। তবে আপনি যদি exit()
এটি ব্যবহার করেন তবে মানটি যা প্রয়োজন তা করবে: সাফল্যের কোডে এবং জেনেরিক ব্যর্থতার কোডে অনুবাদ করুন EXIT_SUCCESS
(বা 0
) EXIT_FAILURE
। ব্যবহার করতে EXIT_SUCCESS
, আপনি ছিল এটা পাস করতে exit()
, আপনার কাছ থেকে তা ফেরত না পারে main()
। আমি জানি না যে এই সংকলকের আরও আধুনিক সংস্করণগুলি সেই আচরণটি সংরক্ষণ করেছিল কিনা।
এটি দেখতে দেখতে পোর্টেবল সি প্রোগ্রাম ব্যবহৃত হত:
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello, World!\n");
exit(EXIT_SUCCESS); /* to get good return value to OS */
/*NOTREACHED*/ /* to silence lint warning */
return 0; /* to silence compiler warning */
}
অন্যদিকে: আমি যদি সঠিকভাবে স্মরণ করি তবে প্রস্থান মূল্যগুলির জন্য ভিএমএস কনভেনশন বিজোড় / এমনকি এর চেয়ে বেশি সংখ্যক প্রয়োজন। এটি তীব্রতার স্তরের এনকোড করতে আসলে তিনটি বিটের মতো কিছু ব্যবহার করে। তবে সাধারণভাবে বলতে গেলে, বিজোড় তীব্রতার মাত্রা সাফল্য বা বিবিধ তথ্য এবং এমনকী ত্রুটিগুলি নির্দেশ করে।