জিসিসি সতর্কতা "'' পরে শুরু করা হবে


228

আমি তৃতীয় পক্ষের কোড থেকে প্রচুর এই সতর্কতা পেয়ে যাচ্ছি যা আমি সংশোধন করতে পারি না। এই সতর্কতাটি নিষ্ক্রিয় করার উপায় কি অন্তত কিছু নির্দিষ্ট ক্ষেত্রে (যেমন ভিসি ++ তে # প্রগমা পুশ / পপ) এর জন্য এটি নিষ্ক্রিয় করার কোনও উপায় আছে?

উদাহরণ:

list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after 
list.h:1117: warning:   `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'

আপনি দয়া করে প্রকৃত সতর্কতাগুলির কয়েকটি লাইন পোস্ট করতে পারেন? এবং এটিও বলুন যে এটি সি, সি ++ হয় এবং যদি আপনার উত্স থাকে তবে যদি লিঙ্কার বা সংকলন প্রক্রিয়া থেকে সতর্কতা আসে?
সিএসএল

উত্তর:


371

সদস্যরা ক্লাসে উপস্থিত হওয়ার সাথে সাথে একই ক্রমে প্রাথমিকের তালিকায় উপস্থিত রয়েছে তা নিশ্চিত করুন

Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

বা আপনি চালু করতে পারেন -Wno-reorder


91
কেন এই গুরুত্বপূর্ণ বিটিডব্লিউ? কেন এই সতর্কতা বিদ্যমান?
ইলফ

40
@ এলফ কিছু ক্ষেত্রে (প্রস্তাবিত নয়), bএবং সূচনাটি aএকে অপরের উপর নির্ভর করে। একজন নির্বোধ ব্যবহারকারী কিছু কার্যকর হওয়ার জন্য আরম্ভের আদেশটি পরিবর্তনের চেষ্টা করতে পারে এবং সতর্কতা এটি পরিষ্কার করে দেয় যে এটি কাজ করে না।
গর্পিক

24
সুতরাং ঘোষণার ক্রমটির অর্থগত অর্থ রয়েছে, এমনকি ঘোষণার মধ্যে কোনও সম্পর্ক না থাকলেও? কী অর্থহীন!
চুয়াডু

10
এই সতর্কতাটি কেন বিদ্যমান এবং -Wno-reorderকোন সমস্যার কারণ হতে পারে তা উল্লেখ না করেই এটি ব্যাখ্যা করে না । আমি জানি যে ওপি অন্য কোনও বিবরণ জিজ্ঞাসা করেনি, তবে এই জাতীয় উচ্চ ভোটের জবাব আমি কমপক্ষে প্রসঙ্গে এবং এর আশেপাশের বিষয়গুলির উল্লেখ করতে আশা করব। ওপি যে প্রশ্নটি লিখেছিল তা কি আমাদের উত্তর দেওয়ার কথা নয় ?
আন্ডারস্কোর_

4
@ সিপি.এএনজিআর সদস্যদের তাদের ঘোষণার ক্রম হিসাবে সূচনা করা হয়, আরআইডি-তালিকায় তাদের আদেশ নয় - সুতরাং, যদি কোনও সদস্যের সূচনাটি অন্যটির উপর নির্ভর করে তবে ঘোষণাপত্রটি অদলবদল হয়ে যায় তাই নির্ভরশীল তার উপর নির্ভরশীলের পরে আরম্ভ হয়ে যায়, কেউ খাঁটি ইউবি হিসাবে খুব শীঘ্রই খুব খারাপ সময় আসবে।
আন্ডারস্কোর_ডি


17

এই ত্রুটিযুক্ত কিউটি ব্যবহারকারীদের জন্য, এটি .pro ফাইলে যুক্ত করুন

QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder

7

ব্যবহার -Wno-reorder(ম্যান জিসিসি আপনার বন্ধু :))


6
বাহ, আপনি আর একটি নতুন উপায় খুঁজে পেয়েছেন RT_M: MIYF (লোকটি আপনার বন্ধু) আপনি যদি কিছু মনে করেন না তবে আমি এটি ব্যবহার করতে যাচ্ছি :)
ওরেন এস

4

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

ঝাঁকুনিতে একই বৈশিষ্ট্য বিদ্যমান ।

আপনি CMake ব্যবহার করেন, তাহলে আপনি নির্দিষ্ট করতে পারেন SYSTEMজন্য include_directories


আপনি কীভাবে "নির্দিষ্ট SYSTEM" করবেন তা ব্যাখ্যা করতে পারেন ?
einpoklum

1
include_directoriesলাইনের শেষে কেবল স্ট্রিং `SYSTEM` রাখুন ।
ড্রয় নোকস

1

শুরুর ক্রমের বিষয়টি বিবেচনা করে না। সমস্ত ক্ষেত্রগুলি তাদের শ্রেণি / কাঠামোর সংজ্ঞা অনুসারে শুরু করা হয়। তবে প্রারম্ভিক তালিকার ক্রমটি যদি আলাদা আলাদা হয় তবে এই সতর্কতাটি উত্পন্ন করে cc এই সতর্কতাটি এড়াতে কেবল সূচনা আদেশ পরিবর্তন করুন। তবে আপনি ফিল্ডটি নির্মাণের আগে আরম্ভের মাধ্যমে ব্যবহার করতে পারবেন না। এটি একটি রানটাইম ত্রুটি হবে। সুতরাং আপনি সংজ্ঞা পরিবর্তন করুন। সাবধান এবং মনোযোগ রাখুন!


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

এটা খুব করে ব্যাপার যদি Init তালিকায় 2nd বস্তুর 1st বস্তু থেকে initd করা হয়, কিন্তু তারা হেডারের মধ্যে প্রায় কুপথ ঘোষিত করছি। সেক্ষেত্রে বিষয়গুলি খুব অদ্ভুত হতে পারে।
আন্ডারস্কোর_

0
Class C {
   int a;
   int b;
   C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

অর্ডারটি গুরুত্বপূর্ণ কারণ যদি খ এর আগে একটি আরম্ভ করা হয়, এবং একটি খ এর উপর নির্ভরশীল। অপরিবর্তিত আচরণ উপস্থিত হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.