-ansi
এটি একটি অপ্রচলিত সুইচ যা সি স্ট্যান্ডার্ড , আইএসও / আইসিসি 9899: 1990 -এর 30-বছরের পুরানো অপ্রচলিত সংশোধন অনুসারে সংকলককে অনুরোধ করার অনুরোধ করে যা মূলত এএনএসআই স্ট্যান্ডার্ড X3.159-1989 "প্রোগ্রামিং ল্যাঙ্গুয়েজ সি'র পুনর্নির্মাণ । অপ্রচলিত কেন? কারণ সি 90 আইএসও প্রকাশিত হওয়ার পরে আইএসও সি মানদণ্ডের দায়িত্বে ছিল এবং সি 90-তে যে কোনও প্রযুক্তিগত সংকলন আইএসও প্রকাশ করেছে। সুতরাং এটি ব্যবহার করা আরও উপযুক্ত -std=c90
।
এই স্যুইচটি ছাড়াই, সাম্প্রতিক জিসিসি সি সংকলকগুলি আইএসও / আইসিসি 9899: 2011 বা নতুন 2018 সংশোধনীতে মানিকৃত সি ভাষার সাথে খাপ খায় ।
দুর্ভাগ্যক্রমে কিছু অলস সংকলক বিক্রেতারা আছেন যারা বিশ্বাস করেন যে এটি কোনও পুরানো অপ্রচলিত স্ট্যান্ডার্ড রিভিশনকে আটকে রাখা গ্রহণযোগ্য which
স্যুইচটি ব্যবহার করা এই কোডগুলি এই অপ্রচলিত সংকলকগুলিতে সংকলন করা উচিত তা নিশ্চিত করতে সহায়তা করে।
-pedantic
একটি আকর্ষণীয় এক। অনুপস্থিতিতে -pedantic
, একটি নির্দিষ্ট স্ট্যান্ডার্ডের জন্য অনুরোধ করা হলেও, জিসিসি এখনও কিছু এক্সটেনশনের অনুমতি দেবে যা সি স্ট্যান্ডার্ডে গ্রহণযোগ্য নয়। উদাহরণস্বরূপ প্রোগ্রামটি বিবেচনা করুন
struct test {
int zero_size_array[0];
};
C11 খসড়া n1570 অনুচ্ছেদ 6.7.6.2p1 বলেছেন :
Typeচ্ছিক প্রকারের যোগ্যতা এবং কীওয়ার্ড স্ট্যাটিক ছাড়াও [এবং] একটি এক্সপ্রেশন বা * সীমিত করতে পারে। যদি তারা একটি অভিব্যক্তি সীমিত করে (যা একটি অ্যারের আকার নির্দিষ্ট করে), এক্সপ্রেশনটির একটি পূর্ণসংখ্যার প্রকার থাকবে। যদি অভিব্যক্তিটি একটি ধ্রুবক অভিব্যক্তি হয় তবে এর মান শূন্যের চেয়ে বড় হবে। [...]
সি স্ট্যান্ডার্ডের জন্য অ্যারের দৈর্ঘ্য শূন্যের চেয়ে বেশি হওয়া দরকার; এবং এই অনুচ্ছেদটি সীমাবদ্ধতার মধ্যে রয়েছে ; মানটি নিম্নলিখিত 5.1.1.3p1 বলছে :
যদি একটি প্রিপ্রোসেসিং অনুবাদ ইউনিট বা অনুবাদ ইউনিটে কোনও সিনট্যাক্স নিয়ম বা সীমাবদ্ধতার লঙ্ঘন থাকে তবে একটি আচরণ যথাযথভাবে সংজ্ঞায়িত বা বাস্তবায়ন হিসাবেও নির্দিষ্ট করে দেওয়া হলেও একটি বাস্তবায়ন বাস্তবায়ন কমপক্ষে একটি ডায়গনিস্টিক বার্তা উত্পন্ন করবে (বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে চিহ্নিত)) সংজ্ঞায়িত। অন্যান্য পরিস্থিতিতে ডায়াগনস্টিক বার্তাগুলি তৈরি করা দরকার নয়))
তবে আপনি যদি প্রোগ্রামটি সংকলন করেন তবে gcc -c -std=c90 pedantic_test.c
কোনও সতর্কতা উত্পন্ন হয় না।
-pedantic
সংকলক আসলে সি স্ট্যান্ডার্ড মেনে চলতে কারণ ; সুতরাং এখন এটি একটি ডায়গনিস্টিক বার্তা তৈরি করবে, যেমনটি স্ট্যান্ডার্ডের দ্বারা প্রয়োজনীয়:
gcc -c -pedantic -std=c90 pedantic_test.c
pedantic_test.c:2:9: warning: ISO C forbids zero-size array ‘zero_size_array’ [-Wpedantic]
int zero_size_array[0];
^~~~~~~~~~~~~~~
সুতরাং সর্বাধিক বহনযোগ্যতার জন্য, স্ট্যান্ডার্ড রিভিশনটি উল্লেখ করা যথেষ্ট নয়, আপনাকে অবশ্যই -pedantic
(বা -pedantic-errors
) অবশ্যই নিশ্চিত করতে হবে যে জিসিসি আসলে স্ট্যান্ডার্ডের অক্ষরকে মেনে চলে।
প্রশ্নের শেষ অংশটি ছিল সি ++ এর-ansi
সাথে ব্যবহার সম্পর্কে । এএনএসআই কখনই সি ++ ভাষা মানিক করে না - এটি কেবল আইএসও থেকে গ্রহণ করে, সুতরাং এটি "ফ্রান্সের দ্বারা ইংরেজী হিসাবে মানিকৃত" বলা যতটা বোঝা যায়। তবে জিসিসি এখনও এটি সি ++ এর জন্য মেনে নেবে বলে মনে হচ্ছে যত বোকা।