লাইব্রেরির শিরোনামগুলি থেকে জিসিসির সতর্কতাগুলি কীভাবে দমন করা যায়?


126

আমার একটি প্রকল্প রয়েছে যা লগ 4 সিএক্সএক্স, বুস্ট ইত্যাদি ব্যবহার করে লাইব্রেরি যাদের শিরোনাম প্রচুর পরিমাণে (পুনরাবৃত্তিমূলক) সতর্কতা উত্পন্ন করে। লাইব্রেরি থেকে সতর্কতা দমন করার কোনও উপায় রয়েছে (যেমন # অন্তর্ভুক্ত <কিছু-শিরোনাম h>) বা নির্দিষ্ট পাথ থেকে অন্তর্ভুক্ত? প্রজেক্ট কোডে প্রাসঙ্গিক তথ্যটি অস্পষ্ট না করে আমি যথারীতি-ওয়াল এবং / বা-ওয়েক্স্রা ব্যবহার করতে চাই। আমি বর্তমানে মেক আউটপুটে গ্রেপ ব্যবহার করি তবে আমি আরও ভাল কিছু চাই।

উত্তর:


127

ব্যবহার করে আপনি গ্রন্থাগার শিরোলেখগুলি অন্তর্ভুক্ত করতে চেষ্টা করতে পারে -isystemপরিবর্তে -I। এটি তাদের "সিস্টেমের শিরোনাম" করে তুলবে এবং জিসিসি তাদের জন্য সতর্কতার খবর দেবে না।


11
আপনি যদি এক্সকোডে এটি করার চেষ্টা করছেন তবে আপনার টার্গেট বিল্ড সেটিংসে "কাস্টম সংকলক পতাকাগুলি" তে আপনার "অন্যান্য সি ++ পতাকা" এর মধ্যে সিস্টেমের পথটি আটকে দিন।
ম্যাট পার্কিনস

3
একটি সম্ভাব্য অবক্ষয় হ'ল কিছু প্ল্যাটফর্মে, জি ++ স্বয়ংক্রিয়ভাবে কোনও সিস্টেমের শিরোনামগুলিকে আবদ্ধ করবে extern "C", আপনি #includeযদি কোনও -isystemপথে সি ++ শিরোলেখ করেন তবে সি লিঙ্কেজ সম্পর্কে অদ্ভুত ত্রুটির সৃষ্টি করবে।
তাভিয়ান বার্নেস

1
+1 টি আমার সাথে বিরক্তিকর বুস্ট সতর্কবার্তা সমস্যার সমাধানের সাহায্য stackoverflow.com/questions/35704753/warnings-from-boost
mrgloom

3
২.২ ঘন্টা আগে ঠিক একই জিনিস বলে ওপি-র নিজের উত্তরের চেয়ে কেন এত বেশি ভোট রয়েছে?
আন্ডারস্কোর_১

1
এক্সকোডের জন্য: আমার টার্গেট বিল্ড সেটিংসে "অন্যান্য সি ++ পতাকা" তে কোনও ফোল্ডার পাথ না থাকলে কী হবে? কেউ কি এই সমাধানগুলি বিস্তারিতভাবে বলতে পারেন?
অসির

107

সিএমকে ব্যবহারকারীদের জন্য, আপনি include_directoriesপ্রতীকটি অন্তর্ভুক্ত করার জন্য আপনার নির্দেশিকাগুলি সংশোধন করতে পারেন SYSTEMযা এই জাতীয় শিরোনামগুলির বিরুদ্ধে সতর্কতা দমন করে।

include_directories(SYSTEM "${LIB_DIR}/Include")
                    ^^^^^^

লাইব্রেরি যদি ${LIBFOO_USE_FILE}সিএমকে অন্তর্ভুক্ত () কমান্ডের সাথে ব্যবহার করতে হয় এমন একটি চলক সরবরাহ করে তবে কী হবে ?
ওয়াল্ডরিয়াস

2
এটি আমার সমস্যার প্রায় সমাধান বলে মনে হচ্ছে। আমার ১.) একটি বাইনারি টার্গেট, যা ২ এর উপর নির্ভর করে)) একটি শিরোলেখ কেবলমাত্র নিজের দ্বারা লিখিত লক্ষ্য, যা ৩ এর উপর নির্ভর করে) কীভাবে কেবল 1 এবং 2 এর জন্য কীভাবে সতর্কতা পেতে হবে তা আমার কোনও ধারণা নেই। আপনার কোন ধারণা আছে?
knedlsepp

2
কাজ বলে মনে হচ্ছে না। আমি এটি ব্যবহার করে এমন একটি প্রকল্পের মাধ্যমে চেষ্টা করেছি easylogging++এবং আমি easylogging++.hযেখানে ফোল্ডারটি থাকি সেখানে SYSTEMবিকল্পের সাথে অন্তর্ভুক্ত করা সত্ত্বেও একই বিপুল পরিমাণ সতর্কবার্তা পাই ।
rbaleksandar

এই জন্য অনেক ধন্যবাদ. এটি পৃষ্ঠা এবং সতর্কতার পৃষ্ঠা থেকে আমাকে রক্ষা করেছে।
সোভালোরজেন

1
গৃহীত উত্তরের মত একই মন্তব্য: এটি আমার পক্ষে খারাপ অভ্যাস।
রাফি

55

আপনি pragmas ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

// save diagnostic state
#pragma GCC diagnostic push 

// turn off the specific warning. Can also use "-Wall"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>

// turn the warnings back on
#pragma GCC diagnostic pop

3
জিসিসি> = 4.6 সঙ্গে শুধুমাত্র তখনই উপলব্ধ
Caduchon

1
আমি পুশ / পপ প্রাগমাসের দক্ষতা ভালবাসছি। আমি কয়েক বছর আগে জাভা উপলভ্য এবং সি / সি ++ এর জন্য হতাশ / হিংসুক হওয়ার মতো কিছু মনে করি। আমি পছন্দ করি যে এটি উপলভ্যgcc
ট্রেভর বয়েড স্মিথ

@ ট্রেভরবয়েডস্মিথ এমএসের clবেশ কয়েক বছর ধরে ক্ষমতা ছিল ... সময়ে সময়ে gccঅভিযোজিত হতে কিছুটা ধীর হয়।
অ্যালেক্সিস উইল্কে

29

আমি কৌশল খুঁজে পেয়েছি। লাইব্রেরিতে মেকফিল -Idirব্যবহারের পরিবর্তে অন্তর্ভুক্ত রয়েছে -isystem dir। জিসিসি এর পরে সিস্টেমকে বুস্ট ইত্যাদির হিসাবে বিবেচনা করে যেমন তাদের অন্তর্ভুক্ত করে এবং তাদের থেকে কোনও সতর্কতা উপেক্ষা করে।


মনে রাখবেন যে আপনি যদি পূর্বনির্ধারিত শিরোনাম ব্যবহার করেন তবে শিরোনাম এবং কোড উভয়ই সংকলন করার সময় আপনাকে পতাকা যুক্ত করতে হবে।
ব্যবহারকারী 202729

9

#pragmaসংকলক নির্দেশাবলী হয়। আপনি # অন্তর্ভুক্ত করার আগে কিছু সেট করতে পারেন এবং এটি পরে অক্ষম করতে পারেন।

আপনি এটি কমান্ড লাইনেও করতে পারেন

সতর্কতা অক্ষম করার বিষয়ে অন্য একটি জিসিসি পৃষ্ঠা ।

আমি সোর্স কোড মধ্যে # pragma এর ব্যবহার করে, এবং তারপর একটি প্রদান বিকল্পের জন্য যেতে হবে শব্দ কেন তুমি সতর্কবার্তা নিষ্ক্রিয় করছে (একটি মন্তব্য হিসাবে) কারণ। এর অর্থ হেডার ফাইলগুলি সম্পর্কে যুক্তিযুক্ত হওয়া উচিত।

শ্রেণিবিন্যাস করে জিসিসি এটির নিকটবর্তীসতর্কতা ধরণের করে । আপনি তাদের সতর্কতা বা উপেক্ষা করার জন্য শ্রেণিবদ্ধ করতে পারেন। পূর্বের লিঙ্কযুক্ত নিবন্ধগুলি আপনাকে দেখাবে যে কোন সতর্কতাগুলি অক্ষম থাকতে পারে।

দ্রষ্টব্য: আপনি বৈশিষ্ট্যগুলি ব্যবহার করে নির্দিষ্ট সতর্কতাগুলি রোধ করতে উত্স কোডটিও ম্যাসেজ করতে পারেন ; যাইহোক, এটি আপনাকে জিসিসির সাথে বেশ ঘনিষ্ঠভাবে আবদ্ধ করে।

দ্রষ্টব্য 2: জিসিসি মাইক্রোসফ্টের সংকলক হিসাবে ব্যবহৃত পপ / পুশ ইন্টারফেসও ব্যবহার করে - মাইক্রোসফ্ট এই ইন্টারফেসের মাধ্যমে সতর্কতাগুলি অক্ষম করে। আমি আপনাকে এটি আরও তদন্ত করার পরামর্শ দিচ্ছি, কারণ এটি এমনকি সম্ভব কিনা তা আমি জানি না।


আমি প্রাগমাস হিসাবে বিবেচনা করেছি তবে আমি যদি শিরোনামটি অন্তর্ভুক্ত করার আগে কোনও সতর্কতা দমন করি তবে # অন্তর্ভুক্তির পরে কীভাবে আমি এটি পূর্ববর্তী স্থানে ফিরিয়ে দেব ? আমি প্রজেক্ট কোডের জন্য সমস্ত সতর্কতা দেখতে চাই (আমাকে ইতিমধ্যে কয়েকবার সাহায্য করেছে) তবে কমান্ড লাইন থেকে নিয়ন্ত্রণ আছে।
এডএসআর

4

আপনি প্রাকম্পাইল্ড শিরোনাম ব্যবহার করে দেখতে পারেন । সতর্কতাগুলি দূরে যাবে না তবে কমপক্ষে আপনার মূল সংকলনটি প্রদর্শিত হবে না।


1
এটি আসলে একটি ভাল ধারণা হতে পারে। তৃতীয় পক্ষ অন্তর্ভুক্ত প্রতিদিন পরিবর্তন হয় না।
এডএসআর

যথাযথভাবে। যদিও আমি এগুলি লিনাক্সে তেমন ব্যবহার করি নি, তারা ভিজ্যুয়াল স্টুডিওতে বেশ ভাল কাজ করে।
পাবলো সান্তা ক্রুজ 15

না, তারা এখনও সংক্ষেপে প্রদর্শিত হবে যদি না আপনি তাদের দমন করার জন্য অন্য কোনও উপায় ব্যবহার করেন (যেমন -isystem, তবে এটি শিরোনাম এবং
কোডটিতে

2

আপনার যদি স্পষ্টভাবে কোনও সিস্টেমের শিরোনামকে ওভাররাইড করতে হয় তবে আপনি প্রাগমাসে সীমাবদ্ধ। make dependআউটপুট মাধ্যমে আপনি যা ব্যবহার করছেন তা যাচাই করতে পারবেন ।

এছাড়াও gcc> = 4.6 এর জন্য ডায়াগনস্টিক পুশ-পপ দেখুন


1

নিচে রাখা

#pragma GCC system_header

এই ফাইলে নিম্নলিখিত সকল কোডের জন্য জিসিসি সতর্কতা বন্ধ করবে।


-9

এই সতর্কতার জন্য অবশ্যই কারণ থাকতে হবে। এটি হয় আপনার কোডটিতে লাইব্রেরি ব্যবহার করে এমন ত্রুটি বা লাইব্রেরি কোডের ত্রুটিগুলির কারণে ঘটবে। প্রথম ক্ষেত্রে, আপনার কোডটি ঠিক করুন। দ্বিতীয় ক্ষেত্রে, হয় লাইব্রেরি ব্যবহার বন্ধ করুন অথবা এটি FOSS কোড হলে এটি ঠিক করুন।


ভাল পরামর্শের জন্য +1: ডি কিন্তু তিনি কীভাবে নির্দিষ্ট কিছু করবেন তা জিজ্ঞাসা করছেন: ডি
হাসান সৈয়দ

4
কিছু সতর্কতাগুলি অসম্ভব বা ঠিক করা খুব কঠিন, বিশেষত তৃতীয় পক্ষের কোডে, বিশেষত বুস্টের রূপক-সমৃদ্ধ কোডগুলিতে।
ulidtko

3
সবচেয়ে খারাপ যে আমাকে বাগ দিচ্ছে তা হ'ল 'গ' এর ছায়া গোছানো 'এই' [-অরওয়্যার = শ্যাডো] এর একটি সদস্যের ঘোষণা "" কিছুটা বুস্ট শিরোনামে গভীর, গভীর। এটি অবশ্যই কোনও সমস্যা নয়, তবে এটি এবং অনুরূপ ইস্যুগুলি আউটপুট বানিয়ে দিচ্ছে এবং আমাদের কোড-বেসে প্রকৃত ছায়া নেওয়ার ঘটনা খুঁজে পাওয়া আমার পক্ষে কঠিন।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.