আমি সর্বনিম্ন সেটটি পেয়েছি এবং এতে অন্তর্ভুক্ত রয়েছে যে সর্বাধিক সতর্কতার স্তরের হওয়া উচিত। তারপরে আমি সেই তালিকা থেকে সতর্কবার্তাগুলির সেটটি সরিয়ে দিয়েছিলাম যা আমার মনে হয় যে আসলে খারাপ কিছু ঘটছে তা নির্দেশ করে না, অন্যথায় সত্যিকারের বিল্ডে ব্যবহার করার মতো অনেকগুলি ভুয়া ইতিবাচকতা রয়েছে। আমি বাদ দিয়েছিলাম এমন প্রত্যেককে কেন বাদ দেওয়া হয়েছিল তা নিয়ে আমি মন্তব্য করেছি। এটি প্রস্তাবিত সতর্কবার্তাগুলির আমার চূড়ান্ত সেট:
আমি অন্তর্ভুক্ত করি -Wno-unusedকারণ আমার প্রায়শই ভেরিয়েবল থাকে যা আমি জানি যে আমি পরে ব্যবহার করব তবে এখনও এর জন্য কার্যকারিতা রচনা করা হয়নি। সে সম্পর্কে সতর্কতাগুলি সরানো আমাকে মাঝে মাঝে জিনিসগুলির বাস্তবায়ন পিছিয়ে দেওয়ার জন্য আমার পছন্দের স্টাইলে লিখতে দেয়। কিছুটা ফাটল না পড়ে তা নিশ্চিত করার জন্য একবারে একবারে এটি বন্ধ করা কার্যকর।
-Wdisabled-optimizationএকটি শক্তিশালী ব্যবহারকারী-পছন্দ সেটিংস মত মনে হচ্ছে। আমি এটিকে কেবল আমার বিল্ডে যুক্ত করেছি (কেবলমাত্র সুস্পষ্ট কারণে অনুকূলিত বিল্ডগুলির জন্য) এবং এটি কোনও কিছুই চালু করেনি, সুতরাং এটি আমার কোড করার মতো উপায়ের জন্য বিশেষত চ্যাটি সতর্কতা বলে মনে হয় না। আমি এটি অন্তর্ভুক্ত করেছি (যদিও এই সতর্কবার্তাটি কার্যকর করার কোডটি অগত্যা ভুল নয়) কারণ আমি আমার সরঞ্জামগুলির বিরুদ্ধে না হয়ে তাদের সাথে কাজ করতে বিশ্বাস করি। যদি জিসিসি আমাকে বলছে যে কোডটি আমি এটি লিখেছি সেভাবে কোডটি অনুকূলিত করতে পারে না, তবে আমার এটি পুনরায় লেখার দিকে নজর দেওয়া উচিত। আমি সন্দেহ করি যে কোডটি এই সতর্কবার্তাটিকে ট্রিগার করে সেগুলি আরও বেশি মডুলার হওয়া থেকে উপকার পেতে পারে, নির্বিশেষে, কোডটি প্রযুক্তিগতভাবে ভুল (সম্ভবত) না হলেও স্টাইলিস্টিকভাবে এটি সম্ভবত।
-Wfloat-equalনিরাপদ সমতা তুলনার জন্য সতর্ক করে (বিশেষত, -1 এর অ-গণিত মানের সাথে তুলনা)। আমার কোডে যেখানে আমি এটি ব্যবহার করি তার একটি উদাহরণ হ'ল আমার কাছে ভাসমান ভেক্টর রয়েছে। আমি এই ভেক্টরটি দিয়ে যাচ্ছি, এবং এমন কিছু উপাদান রয়েছে যা আমি এখনও তাদের মূল্যায়ন করতে পারি না, তাই আমি সেগুলি -1.0f এ সেট করেছি (যেহেতু আমার সমস্যাটি কেবল ইতিবাচক সংখ্যা ব্যবহার করে, -1 ডোমেনের বাইরে রয়েছে)। আমি পরে যেতে এবং আপডেট -1.0f মান। এটি অপারেশনের একটি পৃথক পদ্ধতিতে নিজেকে সহজে leণ দেয় না। আমি সন্দেহ করি যে বেশিরভাগ লোকের এই সমস্যা নেই এবং ভাসমান পয়েন্টে একটি সঠিক সংখ্যার তুলনা করা সম্ভবত একটি ত্রুটি, তাই আমি এটি ডিফল্ট তালিকায় অন্তর্ভুক্ত করছি।
-Wold-style-castআমি ব্যবহার করছি লাইব্রেরি কোডে অনেক মিথ্যা ইতিবাচক রয়েছে। বিশেষত, নেটওয়ার্কিংয়ে ব্যবহৃত ফাংশনগুলির এইচটনল পরিবার, পাশাপাশি আমি ব্যবহার করছি একটি রিজান্ডেল (এইএস) এনক্রিপশন বাস্তবায়নের ক্ষেত্রে পুরানো স্টাইলের ক্যাসেট রয়েছে যা এটি আমাকে সতর্ক করে দেয়। আমি এই উভয়টি প্রতিস্থাপনের ইচ্ছা করি, তবে আমার কোডে অন্য কোনও অভিযোগ রয়েছে কিনা তা সম্পর্কে আমি নিশ্চিত নই। যদিও বেশিরভাগ ব্যবহারকারীর ডিফল্টরূপে এটি সম্ভবত থাকা উচিত।
-Wsign-conversionখুব শক্ত ছিল (এবং প্রায়শই তালিকা তৈরি করে নি)। এটি আমার কোডটিতে চালু করা বিপুল পরিমাণ সতর্কতা (100+) জেনারেট করেছে। তাদের প্রায় সবাই নির্দোষ ছিল। যাইহোক, আমি যেখানেই নিশ্চিত ছিলাম স্বাক্ষরিত পূর্ণসংখ্যাগুলি ব্যবহার করার বিষয়ে আমি সাবধানতা অবলম্বন করেছি, যদিও আমার বিশেষ সমস্যা ডোমেনের জন্য আমি সাধারণত প্রচুর পরিমাণে পূর্ণসংখ্যা বিভাগের কারণে স্বাক্ষরবিহীন মানগুলি ব্যবহার করে সামান্য দক্ষতা বৃদ্ধি পেতে পারি। আমি এই দক্ষতা ত্যাগ করেছি কারণ আমি দুর্ঘটনাক্রমে একটি স্বাক্ষরযুক্ত পূর্ণসংখ্যাকে একটি স্বাক্ষরবিহীন স্বাক্ষরকারীকে উন্নত করা এবং তারপরে বিভাজন সম্পর্কে উদ্বিগ্ন ছিলাম (যা নিরাপদ নয়, সংযোজন, বিয়োগফল এবং গুণনের বিপরীতে)। এই সতর্কতাটি চালু করা আমাকে আমার বেশিরভাগ ভেরিয়েবলগুলি স্বাক্ষরবিহীন প্রকারে নিরাপদে পরিবর্তন করতে এবং অন্য কয়েকটি জায়গায় কয়েকটি ক্যাসেট যুক্ত করার অনুমতি দেয়। এটি বর্তমানে ব্যবহার করা কিছুটা শক্ত কারণ সতর্কতাটি স্মার্ট নয়। উদাহরণস্বরূপ, আপনি যদিunsigned short + (integral
constant expression), ফলাফলটি অন্তর্নিহিতভাবে ইনট এ প্রচারিত হয়। এটি তখন কোনও সম্ভাব্য সাইন সমস্যা সম্পর্কে সতর্ক করে যদি আপনি সেই মানটি নিরাপদ করেও unsignedবা তার জন্য নির্ধারিত করেন
unsigned short। এটি অবশ্যই সমস্ত ব্যবহারকারীর জন্য সর্বাধিক optionচ্ছিক সতর্কতা।
-Wsign-promo: দেখুন -Wsign-conversion।
-Wswitch-defaultঅর্থহীন বলে মনে হচ্ছে (আপনি সব সম্ভাব্যতার সুস্পষ্টভাবে গণনা করলে আপনি সর্বদা একটি ডিফল্ট কেস চান না)। তবে, এই সতর্কতাটি চালু করা এমন কিছু কার্যকর করতে পারে যা সম্ভবত একটি ভাল ধারণা। যেসব ক্ষেত্রে আপনি স্পষ্টভাবে তালিকাবদ্ধ সম্ভাবনাগুলি (তবে অন্যান্য সংখ্যাগুলি সম্ভব) ব্যতীত সমস্ত কিছু উপেক্ষা করতে চান, তারপরে প্রবেশ করুনdefault: break;এটি স্পষ্ট করতে। যদি আপনি স্পষ্টভাবে সমস্ত সম্ভাবনা গণনা করেন, তবে এই সতর্কতাটি চালু করা নিশ্চিত করে যে আপনি সম্ভাব্য সমস্ত বিকল্পকে প্রকৃত অর্থে আবৃত করেছেন তা নিশ্চিত করার জন্য আপনি দৃ as় (মিথ্যা) মতো কিছু রেখেছিলেন। এটি আপনাকে আপনার সমস্যার ডোমেনটি কী তা স্পষ্ট করে দেয় এবং এটি প্রোগ্রামাগুলিভাবে প্রয়োগ করে। যাইহোক, আপনি যে কোনও জায়গায় কেবল দাবী (মিথ্যা) স্টিকিংয়ের ক্ষেত্রে যত্নবান হতে হবে। এটি ডিফল্ট কেস দিয়ে কিছু না করার চেয়ে ভাল, তবে যথারীতি দৃ usual়তার সাথে, এটি রিলিজ বিল্ডগুলিতে কাজ করবে না। অন্য কথায়, আপনি যে নম্বরগুলি পেয়েছেন তা বলার জন্য আপনি এটির উপর নির্ভর করতে পারবেন না, বলুন, একটি নেটওয়ার্ক সংযোগ বা কোনও ডাটাবেস যা আপনার উপর নিখুঁত নিয়ন্ত্রণ নেই। ব্যতিক্রম বা তাড়াতাড়ি প্রত্যাবর্তন হ'ল এটি পরিচালনা করার সেরা উপায় (তবে এখনও আপনার ডিফল্ট কেস হওয়া দরকার!)।
-Werrorআমার জন্য একটি গুরুত্বপূর্ণ। একাধিক লক্ষ্যবস্তু সহ একটি বহু-থ্রেড বিল্ডে প্রচুর পরিমাণে সংকলন করার সময়, কোনও সতর্কতার দ্বারা পিছলে যাওয়া সহজ। সতর্কতাগুলিকে ত্রুটিতে পরিণত করা নিশ্চিত করে যে আমি সেগুলি লক্ষ্য করেছি।
তারপরে এমন একটি সতর্কতা রয়েছে যা উপরের তালিকার অন্তর্ভুক্ত নয় কারণ আমি সেগুলি কার্যকর হতে পেলাম না। আমি কেন সেগুলিকে ডিফল্ট তালিকায় অন্তর্ভুক্ত করছি না সে সম্পর্কে এই সতর্কতা এবং আমার মন্তব্যগুলি:
-Wabiপ্রয়োজন নেই কারণ আমি বিভিন্ন সংকলক থেকে বাইনারি একত্রিত করছি না। আমি যাইহোক এটির সাথে সংকলনের চেষ্টা করেছি, এবং এটি ট্রিগার হয়নি, সুতরাং এটি অযথা ভারবস বলে মনে হয় না।
-Waggregate-returnএমন কিছু নয় যা আমি একটি ত্রুটি হিসাবে বিবেচনা করি। উদাহরণস্বরূপ, ক্লাসগুলির কোনও ভেক্টরের লুপের জন্য একটি পরিসীমা-ভিত্তিক ব্যবহার করার সময় এটি ট্রিগার করে। রিটার্ন মান অপ্টিমাইজেশনের এর কোনও নেতিবাচক প্রভাবের যত্ন নেওয়া উচিত।
-Wconversionএই কোডটিতে ট্রিগারগুলি: short n = 0; n += 2;ইন্টিতে অন্তর্নিহিত রূপান্তরটি একটি সতর্কতার কারণ হয়ে দাঁড়ায় যখন এটি তার টার্গেটের ধরণে ফিরে আসে।
-Weffc++সমস্ত ডেটা সদস্যকে আরম্ভকারী তালিকায় আরম্ভ না করা হলে একটি সতর্কতা অন্তর্ভুক্ত। আমি ইচ্ছাকৃতভাবে অনেক ক্ষেত্রে এটি করি না, তাই সতর্কতার সেটটি খুব কার্যকর না হওয়ার জন্য বিশৃঙ্খলাযুক্ত। এটি একবারে একবারে চালু করা এবং অন্যান্য সতর্কতাগুলির জন্য স্ক্যান করতে সহায়ক, যদিও (যেমন বেস বেসগুলির ভার্চুয়াল ডেস্ট্রাক্টর)। এটি -Wallনিজের একক সতর্কতার পরিবর্তে সতর্কতাগুলির সংগ্রহ (যেমন ) এর সংগ্রহ হিসাবে বেশি কার্যকর হবে ।
-Winlineঅনুপস্থিত কারণ আমি শিরোনামগুলিতে কেবল ইনলাইন ফাংশন সংজ্ঞায়িত করতে অনুকূলকরণের উদ্দেশ্যে ইনলাইন কীওয়ার্ডটি ব্যবহার করি না। অপ্টিমাইজারটি আসলে এটি ইনলাইন করে কিনা আমার কিছু যায় আসে না। এই সতর্কবার্তাটিও অভিযোগ করে যে এটি কোনও শ্রেণীর সংস্থায় ঘোষিত কোনও ফাংশন (যেমন একটি খালি ভার্চুয়াল ডেস্ট্রাক্টর) ইনলাইন করতে না পারে।
-Winvalid-pch অনুপস্থিত কারণ আমি প্রম্পম্পাইল্ড শিরোনাম ব্যবহার করি না।
-Wmissing-format-attributeব্যবহার করা হয় না কারণ আমি gnu এক্সটেনশন ব্যবহার করি না। একই সাথে -Wsuggest-attributeএবং আরও বেশ কয়েকজন
এর অনুপস্থিতির জন্য সম্ভাব্য উল্লেখযোগ্য -Wno-long-long, যা আমার কোনও প্রয়োজন নেই। আমি -std=c++0x( -std=c++11জিসিসি 4.7 এ) সংকলন করি , এতে long longপূর্ণসংখ্যার প্রকার অন্তর্ভুক্ত থাকে । যারা সি ++ 98 / সি ++ 03 এ পিছনে আটকে রয়েছে তারা সতর্কতা তালিকা থেকে এই বাদটি যুক্ত করার কথা বিবেচনা করতে পারে।
-Wnormalized=nfc ইতিমধ্যে ডিফল্ট বিকল্প, এবং সেরা বলে মনে হচ্ছে।
-Wpaddedক্লাসগুলির বিন্যাসটি অনুকূলকরণের জন্য মাঝেমধ্যে চালু করা হয় তবে এটি চালিত হয় না কারণ শেষদিকে প্যাডিং সরানোর জন্য সমস্ত শ্রেণীর পর্যাপ্ত উপাদান নেই। তত্ত্বে আমি 'ফ্রি' এর জন্য কিছু অতিরিক্ত ভেরিয়েবল পেতে পারি, তবে এটি বজায় রাখার অতিরিক্ত প্রচেষ্টার পক্ষে মূল্য নেই (যদি আমার শ্রেণীর আকার পরিবর্তন হয় তবে আগের ফ্রি ভেরিয়েবলগুলি অপসারণ করা সহজ নয়)।
-Wstack-protector আমি ব্যবহার করি না কারণ ব্যবহার করা হয় না -fstack-protector
-Wstrict-aliasing=3চালু রয়েছে -Wallএবং এটি সবচেয়ে নির্ভুল, তবে মনে হচ্ছে লেভেল 1 এবং 2 আরও সতর্কতা দেয়। তাত্ত্বিকভাবে নিম্ন স্তরের একটি 'শক্তিশালী' সতর্কতা, তবে এটি আরও মিথ্যা ধনাত্মক ব্যয়ের জন্য। আমার নিজের পরীক্ষার কোডটি সমস্ত 3 স্তরের অধীনে পরিষ্কারভাবে সংকলিত হয়েছে।
-Wswitch-enumআমি চাই আচরণ নয়। আমি প্রতিটি সুইচ স্টেটমেন্ট স্পষ্টভাবে পরিচালনা করতে চাই না। ভাষাটি নির্দিষ্ট স্যুইচ স্টেটমেন্টগুলিতে এটি সক্রিয় করার জন্য কিছু ব্যবস্থা থাকলে (ভবিষ্যতে এনামে যে পরিবর্তনগুলি হওয়া উচিত তা সর্বত্র পরিচালনা করা হয় তা নিশ্চিত করতে) তবে এটি "অল-অ-কিছুই না" সেটিংসের জন্য ওভারকিল রয়েছে।
-Wunsafe-loop-optimizationsঅত্যধিক জালিয়াতি সতর্কবার্তা তৈরি করে। এটি পর্যায়ক্রমে এটিকে প্রয়োগ করা এবং ম্যানুয়ালি ফলাফলগুলি যাচাই করা কার্যকর হতে পারে। উদাহরণ হিসাবে, এটি আমার কোডে এই সতর্কতাটি তৈরি করেছিল যখন আমি কোনও ভেক্টরের সমস্ত উপাদানগুলিতে তাদের ফাংশনগুলির একটি সেট প্রয়োগ করতে (লুপের জন্য পরিসর-ভিত্তিক ব্যবহার করে) লুপ করেছি। এটি কনস্ট স্টাড :: স্ট্রিংয়ের কনস্ট কনট অ্যারের নির্মাণকারীর জন্যও সতর্ক করা হচ্ছে (যেখানে এটি ব্যবহারকারীর কোডে লুপ নয়)।
-Wzero-as-null-pointer-constantএবং -Wuseless-castহ'ল জিসিসি-৪.7-কেবলমাত্র সতর্কতা, যা আমি জিসিসি ৪.7 এ স্থানান্তরিত করার সময় যুক্ত করব।
এই গবেষণার কিছু ফলস্বরূপ আমি জিসিসিতে কয়েকটি বাগ রিপোর্ট / বর্ধনের অনুরোধ পেশ করেছি, সুতরাং আশা করি আমি শেষ পর্যন্ত "অন্তর্ভুক্ত নয়" তালিকার "অন্তর্ভুক্ত" তালিকার আরও সতর্কতা যুক্ত করতে সক্ষম হব । এই তালিকায় এই থ্রেডে উল্লিখিত সমস্ত সতর্কতা অন্তর্ভুক্ত রয়েছে (প্লাস আমি কয়েকটি অতিরিক্ত মনে করি)। এই পোস্টে স্পষ্টভাবে উল্লিখিত না হওয়া অনেকগুলি সতর্কতা আমি উল্লেখ করেছি এমন অন্য সতর্কতার অংশ হিসাবে অন্তর্ভুক্ত রয়েছে। যদি কেউ এই পোস্ট থেকে সম্পূর্ণভাবে বাদ দেওয়া কোনও সতর্কতা লক্ষ্য করে তবে আমাকে জানান।
-Wall) একটি হল-Wbloody_everythingপতাকা :-)