-Std = c ++ 11 এবং -std = gnu ++ 11 এর মধ্যে পার্থক্য কী?


132

জিসিসি এবং বিড়ম্বনার জন্য সংকলন প্যারামিটার -std=c++11এবং এর মধ্যে পার্থক্য কী -std=gnu++11? একই প্রশ্ন c99ও সাথে gnu99? আমি সি ++ এবং সি স্ট্যান্ডার্ড সম্পর্কে জানি, এটি আমার আগ্রহী পরামিতিগুলির মধ্যে পার্থক্যগুলি।

আমি কোথাও পড়েছি যে এটি কিছু এক্সটেনশনের সাথে করতে হবে তবে কোনটি এবং কীভাবে নতুন প্রকল্পের জন্য একটি বা অন্যটির মধ্যে নির্বাচন করতে হবে তা আমার কাছে পরিষ্কার নয়।


5
gnuবেশী এক্সটেনশন পড়ুন না এবং আপনি পুরাপুরি একটি মান এবং এড়ানোর এক্সটেনশন লাগিয়া থাকা উচিত যদি তোমরা পোর্টেবল কোড লিখতে চাই।
juanchopanza

উত্তর:


91

আপনি যেমন নিজের মতো করে খুঁজে পেয়েছেন, দুটি বিকল্পের মধ্যে পার্থক্য হ'ল জিএনইউ এক্সটেনশনগুলি যে সি ++ স্ট্যান্ডার্ড লঙ্ঘন করে / প্রসারিত করে তা সক্ষম রয়েছে কি না। GNU C ++ এক্সটেনশানগুলি এখানে বর্ণিত হয়েছে । আপনি আপনার সি ++ প্রোগ্রামগুলিতে বেশিরভাগ জিএনইউ সি এক্সটেনশন ( এখানে বর্ণিত ) ব্যবহার করতে পারেন । এটি সম্পর্কে পড়তেও দরকারী হবে-Wpedantic জিসিসি বিকল্প এখানে

মনে রাখবেন যে কিছু এক্সটেনশনগুলি ব্যবহার করার পরেও কার্যকর হতে পারে -std=c++11, যতক্ষণ না তারা মানটির বিরোধিতা করে না। উদাহরণস্বরূপ, MinGW সংকলক ব্যবহার করার সময়, আমার একটি কাজের জন্য এক্সটেনশনগুলি দরকার Boost.Lexical_Cast। তবে, যতক্ষণ না আপনি সেগুলির কোনওটি ব্যবহার না করেন, সর্বাধিক বহনযোগ্যতার জন্য এক্সটেনশন ছাড়াই আপনি স্ট্যান্ডার্ডকে আটকে থাকা ভাল। আপনি যদি নিজেকে কম্পাইলার পরিবর্তন করতে বাধ্য হন তবে এটি কার্যকর হতে পারে।


4
হ্যাঁ, আমি এক্সটেনশনগুলি এড়িয়ে চলেছি কারণ আমি স্ট্যান্ডার্ড দ্বারা নির্দিষ্টভাবে সংজ্ঞায়িত না এমন কিছু করার প্রস্তাব দিই না ... তবে তারপরেও "লঙ্ঘন" একটি আশ্চর্যজনক এবং বোঝা শব্দ, যখন এই এক্সটেনশনগুলির অনেকগুলি স্ট্যান্ডার্ডিজ ব্যবহার করার জন্য হয় , কেবলমাত্র বাস্তবায়ন-সংজ্ঞা দেওয়া বা নির্দিষ্ট করা বিষয়গুলি নির্দিষ্ট করা যা স্ট্যান্ডার্ডটি নিরব রয়েছে - বা এমনকি সমস্ত এক্সটেনশনগুলিরও ... আপনার কাছে এমন কোনও জিএনইউ এক্সটেনশনের প্রশংসা আছে যা স্ট্যান্ডার্ড স্পষ্টভাবে ব্যাখ্যা করে এমন কিছু থেকে আলাদা কিছু করে স্ট্যান্ডার্ডকে লঙ্ঘন করে?
আন্ডারস্কোর_২

9
যদিও এই উত্তরটি একটি ভাল জেনারেল, আপনি কি এডিট করার বিষয়টি বিবেচনা করবেন যাতে অন্তত সক্রিয় থাকা gnu11তবে সক্রিয় নয় এমন এক্সটেনশনগুলির তালিকা তৈরি করতে পারেন c++11? আপনি যে লিঙ্কটি লিঙ্ক করেছেন তা সমস্ত এক্সটেনশনের এবং আপনি নিজে যেমন ইঙ্গিত করেছেন সেগুলির মধ্যে কিছুগুলি c++11পাশাপাশি (যেমন __restrict__) সক্ষম হয়েছে ।
einpoklum

আমি এখন যা খুঁজে পেয়েছি এবং পতাকাগুলির ডকুমেন্টেশন দেখে কোন উপসংহারে পৌঁছাতে পারি নি তা নিম্নলিখিত: -std = c ++ 11 ট্রাইগ্রাফগুলিকে পুনরায় সক্ষম করে -std = gnu ++ 11 সেগুলি উপেক্ষা করে এবং একটি সতর্কতা প্রকাশ করে, যেমন পুরোপুরি বাদ দেওয়ার পরে কী করে
ড্যানিয়েল 82
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.