c++ - কোনও জিসিসি সতর্কতা কীভাবে অক্ষম করব যার কোনও কমান্ড লাইনের সুইচ নেই?




gcc command-line (3)

আমি নিম্নলিখিত সতর্কতা পেতে:

warning: 'X' is initialized and declared 'extern'

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

এর পাশে যদি একটি -WSomeDefect কী থাকে তবে আমি একটি -Wno-SomeDefect কমান্ড লাইন সুইচটি ব্যবহার করতে পারি তবে দেখে মনে হচ্ছে এই সতর্কতার জন্য আলাদা কোনও সুইচ নেই।

আমি কীভাবে এই ধরনের সতর্কতা অক্ষম করব?


এই সতর্কতার শত শত উদাহরণ রয়েছে এবং সেগুলি সংকলক আউটপুটকে প্লাবিত করে। অবহেলা করা শক্ত।

এটি যদি বাহ্যিক গ্রন্থাগার হয় তবে এই সতর্কতাটি একক ওয়ারিং প্রতিবেদনে হ্রাস করার উপায় রয়েছে। আমি সন্দেহ করছি যে আপনি একক সতর্কতা বার্তায় বেঁচে থাকতে পারেন।

আপনার নিজের ফাংশন / পদ্ধতিতে এই লাইব্রেরি এপিআই মোড়ক করুন। এই এপিআই যেখানে ব্যবহৃত হয় সেখানে নিজস্ব কোডের জটিল পরিবর্তন এড়াতে আপনি বিভিন্ন নামস্থান ব্যবহার করে তাদের নাম 1: 1 রাখতে পারেন। সমস্যাযুক্ত শিরোলেখ ফাইল সহ উত্স অন্তর্ভুক্ত করা হয় কেবল তখনই এই সতর্কতাটি জানানো হবে। লক্ষ্যটি হ'ল সমস্যাযুক্ত হেডার ফাইলটি একবারে অন্তর্ভুক্ত করা।

এই এপিআইটিকে দেখে মনে হচ্ছে এটি করা আরও কঠিন হতে পারে।

যাইহোক এটি যদি তৃতীয় পক্ষের লাইব্রেরি হয় তবে এই পদ্ধতির সাহায্যে সেই লাইব্রেরিটিকে উপহাস করা এবং আপনার কোডের জন্য পরীক্ষা লিখতে সহজ হবে।


উত্থাপিত প্রশ্নের সরাসরি উত্তরের জন্য:

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

এখানে জিসিসিতে সম্পর্কিত ওপেন বাগের প্রতিবেদন এবং স্যুইচ না করে সতর্কতার অনুরূপ মামলার জন্য একটি ওপেন মেটা-বাগ রয়েছে।

আপনি যদি দুটি অ-নির্দিষ্ট দমন প্রক্রিয়াটি ব্যবহার করতে না চান, তবে আপনাকে সম্ভবত জিসিসিতে একটি অতিরিক্ত পতাকায় প্যাচ করতে হবে বা এই নির্দিষ্ট সতর্কতাটি অক্ষম করার জন্য বাগগুলি নিয়ে কাজ করার জন্য অপেক্ষা করতে হবে।


এই সতর্কতাটি সরবরাহকারী কোড বৈধ সি নয় এবং এটি ঠিক করা উচিত। সি ভাষায় এইরকম প্রতিবন্ধকতা লঙ্ঘনের জন্য "ডায়াগনস্টিকস" (সতর্কতা বা ত্রুটি) জারি করা প্রয়োজন এবং এগুলি অক্ষম করার কোনও উপায়ের অস্তিত্বকে বাধ্যতামূলক করে না। আমি বিশ্বাস করি (এবং আমি আরও অনেকের সন্দেহ করি) যে extern একটি extern সাথে সীমাবদ্ধতা লঙ্ঘন ছিল, যেহেতু সাধারণ ব্যবহারে extern কেবল একটি ঘোষণা দেয়, সংজ্ঞা নয়। তবে, প্রতি 6.9.2 ¶1:

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

ব্যাকরণ একটি ইনিশিয়ালাইজারের সাথে extern মঞ্জুরি দেয় বলে মনে হচ্ছে, এটি অবশ্যই একটি বৈধ সংজ্ঞা।

জিসিসির একটি -w বিকল্প রয়েছে যা সম্ভবত সতর্কতাটি বন্ধ করে দেবে, তবে ওভাররাইড এবং কিছুটা ফিরিয়ে দেওয়ার ক্ষমতা না করে সমস্ত সতর্কতা অক্ষম করার ব্যয়ে। এটি যদি সীমাবদ্ধতা লঙ্ঘন হয় এবং এটি অবৈধ কোডটি ঠিক করার লক্ষণ হয়ে থাকে তবে এটি অর্থবোধ করবে; তবে কোডটি বৈধ এবং জিসিসি একেবারে কোনও উদ্দীপনা সম্পর্কিত সতর্কতা না দেওয়ার ব্যবস্থা সরবরাহ করা উচিত।

যেমন একটি মন্তব্যে এলজাই দ্বারা উল্লিখিত:

সতর্কতাগুলি বিভিন্ন বিভাগে আসে: স্ট্যান্ডার্ড প্রয়োজনীয় ডায়াগনস্টিক বার্তা দ্বারা; সাধারণ দুর্ঘটনাজনিত ভাষার অপব্যবহার / অপব্যবহারের লিন্টের মতো স্থির বিশ্লেষণ; -Weffc++ তবে তবুও শৈলীগত মতামত (যেমন, -Weffc++ ); সম্ভবত খুব প্যাডেন্টিক এবং / অথবা -Weverything (উদাঃ -Weverything বা -pedantic )। পরবর্তী বিভাগগুলিতে ওপির ক্ষেত্রে যেমন নির্দিষ্ট সতর্কতা নিষ্ক্রিয় করার উপায়গুলি "অপ্ট আউট" করা উচিত।

জিসিসি সাধারণত বেশিরভাগ সময় এটিকে সম্মান জানাতে চেষ্টা করে এবং আমি মনে করি এটি নিষ্ক্রিয় করার কোনও উপায় না থাকায় এটি জিসিসি বাগ ট্র্যাকারকে জানানো উপযুক্ত হবে





gcc-warning