"G ++ -Wall test.cpp -o টেস্ট" -র "-ওয়াল" কী করে?


92

-o আউটপুট ফাইলের নাম পরিবর্তন করে (আমি খুঁজে পেয়েছি --help ব্যবহার করে)

কিন্তু আমি কি করতে পারি না -Wall?


7
আপনার কনসোলে থাকা "ম্যান জিসিসি" আপনাকে এই পতাকা সম্পর্কে এবং "জিসিসি -ওয়াল" দিয়ে একটি সাধারণ গুগল অনুসন্ধান সম্পর্কে সবকিছু বলে ...
ডেভিড সৌটার

একটি সাধারণ টিপ হিসাবে, manপ্রোগ্রামগুলির জন্য এন্ট্রিগুলি পড়ার চেষ্টা করুন যদি আপনি জানতে চান যে একটি স্যুইচ কী করে, বা কোন স্যুইচ উপলব্ধ। manপৃষ্ঠার gccউপর পড়া যায় linux.die.net/man/1/gcc - আপনি পাঠ্য "-Wall" জন্য একটি দ্রুত সেখানে অনুসন্ধান করতে পারি না
gnud

6
@ ডেভিড সাউটার, গুগল "-ওয়াল" দিয়ে কিছুই খুঁজে পাবে না। এটি অনুসন্ধান থেকে সমস্ত "প্রাচীর" বাদ দেবে।
কিরিল ভি লিয়াডভিনস্কি

@ কিরিল আপনি যদি উদ্ধৃতি ব্যবহার করেন না, যেমন আমি অনুমান করছি ডেভিডের অর্থ
gnud

4
//, আমি সর্বদা ভাবতাম এটি ল্যারি ওয়ালকে শ্রদ্ধা জানায়।
নাথান বাসানিজ

উত্তর:


110

এটি "সকলকে সতর্ক করুন" এর পক্ষে সংক্ষিপ্ত - এটি g ++ আপনাকে যে সমস্ত সতর্কতা সম্পর্কে বলতে পারে সেগুলি (প্রায়) চালু করে। সাধারণত একটি ভাল ধারণা, বিশেষত আপনি যদি একজন শিক্ষানবিস, কারণ এই সতর্কতাগুলি বোঝা এবং ঠিক করা আপনাকে আপনার কোডের বিভিন্ন ধরণের সমস্যা সমাধানে সহায়তা করতে পারে।


24
আরও সতর্কতা (যার মধ্যে বেশিরভাগ কার্যকর রয়েছে) -Wextraএবং দিয়ে চালু করা যেতে পারে -pedantic
gnud

7
এটি (প্রায়) সব নয়। এটি উপলব্ধ উপলভ্য সতর্কতার একমাত্র খুব ছোট ভগ্নাংশ। এগুলিই "সমস্ত" একমত হয়। সত্যিই ভাল ধারণা করতে হয় -Wall -Wextra, এবং তারপর ম্যানুয়াল পড়া অনেক যেমন এটি আরো কারণ এমনকি সতর্কবার্তা আপনি সম্ভব হিসাবে সক্ষম পারে -Wextraশুধুমাত্র একটি ছোট উপশাখা হচ্ছে ...
DevSolar

@ ডেভসোলার খুব ভাল পয়েন্ট আপনি কি জানেন যে এমন কোনও পতাকা রয়েছে যার অর্থ "আক্ষরিক অর্থে সমস্ত সতর্কতা"?
ম্যাট্রিক্সফ্রোগ

4
@ ম্যাট্রিক্সফ্রোগ: দুর্ভাগ্যক্রমে, এরকম কোনও বিকল্প নেই, কমপক্ষে আমার জানা সংকলকগুলির পক্ষে এটি নয় for এবং সময়ের সাথে সাথে উপলভ্য সতর্কতাগুলির তালিকাগুলি পরিবর্তিত হয় ... জিসিসি টিম যদি -Wunreachable-codeকিছুক্ষণ আগে অক্ষম না করে থাকত তবে আপেল এই দিনগুলিতে অনেক বেশি সুখী হত । ;-)
দেবসোলার

36

ম্যান জিসিসি দেখুন।

-ওয়াল এই সতর্কতাগুলি চালু করে:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
 Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) 
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) 
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type 
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing 
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas 
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable 
-Wvolatile-register-var

-ভেক্সট্রায় রয়েছে:

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
 or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

আরও অনেক সতর্কতা রয়েছে যা আপনাকে স্পষ্টভাবে চালু করতে হবে।

উদাহরণস্বরূপ আমাদের সি কোডের জন্য আমরা ব্যবহার করি:

-ওয়াল-ওয়েক্সট্রা-ওয়েলগ্র্যাট-রিটার্ন -ডাব্লাস্ট-এলাইন -ডাব্লাইট-কোয়ে -ডিজিড-অপটিমাইজেশন -উডিভ-বাই-শূন্য -উন্ডিফ-লেবেল-ওয়ার্মপ্যাট-এক্সট্রা-আরগস-ওয়ার্মফ্রেট-ননলিটারেল-ওয়ার্মপ্রেট-সুরক্ষা -উইম্পোর্ট-উইনিট-সেল্ফ-উইনলাইন-উইনডিয়াল-পিচ-উইজম্প-মিসস-আর--লোজিকাল-অপ-ওয়ারার = মিসিং-ব্রেসস-উইমিসিং-ডিক্লেয়ারেশনস-উইন-মিসিং-ফরম্যাট-অ্যাট্রিবিউট -উমিসিচিং-ডায়ারস -উমলটিচার -ওয়াকপ্যাকড -Wpointer-arith -Wreturn-type -Wsequence-point -Wwign-ਤੁਲਨਾ -Wstric-aliasing -Wstict-aliasing = 2 -উসুইচ -উইচইচ-ডিফল্ট -Werror = undef -Wno- অব্যবহৃত-ওয়ার্ভাডিয়্যাডিক-ম্যাক্রোস -উত্তরণ-স্ট্রিংস-ওয়ার্ক ++ -compat -Werror = ঘোষণা-পরে-বিবৃতি -Werror = অন্তর্নিহিত-ফাংশন-ঘোষণা -Wmissing- প্রোটোটাইপস-ওয়ারার = নেস্টেড-এক্সটার্নস-ওয়ারার = পুরানো-শৈলী-সংজ্ঞা -Werror = কঠোর-প্রোটোটাইপস

বা কেবল https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html সহ সতর্কতার সেট


19

দুঃখের বিষয়, উত্তরের কোনও উত্তরই ম্যানুয়ালের প্রকৃত প্রাসঙ্গিক অংশের উদ্ধৃতি দিচ্ছে না, যা সত্যই এটিকে এনে দেয়:

এটি এমন কিছু নির্মাণ সংক্রান্ত সমস্ত সতর্কতাগুলিকে সক্ষম করে যা কিছু ব্যবহারকারী প্রশ্নবিদ্ধ মনে করে এবং ম্যাক্রোগুলির সাথে একত্রে এমনকি এড়াতে সহজ (বা সতর্কতা প্রতিরোধে পরিবর্তন করা))

[...]

মনে রাখবেন যে কিছু সতর্কতা পতাকা এর দ্বারা নিহিত নয় -Wall। তাদের মধ্যে কয়েকটি এমন নির্মাণ সম্পর্কে সতর্ক করে যা ব্যবহারকারীরা সাধারণত সন্দেহজনক হিসাবে বিবেচনা করেন না, তবে যা মাঝে মধ্যে আপনি যাচাই করতে চাইতে পারেন; অন্যরা এমন কিছু নির্মাণের বিষয়ে সতর্ক করে যা প্রয়োজনীয় বা কঠিন কিছু ক্ষেত্রে এড়াতে হবে এবং সতর্কতা দমন করার জন্য কোডটি পরিবর্তন করার কোনও সহজ উপায় নেই। তাদের মধ্যে কিছু দ্বারা সক্ষম করা হয়েছে -Wextra তবে তাদের অনেককে পৃথকভাবে সক্ষম করতে হবে।

এরগো:

  • -Wallনা না "সব সতর্কবার্তা" মানে।
  • এটা না "(প্রায়) সমস্ত" এর অর্থও , দীর্ঘ শট দ্বারা নয়।
  • এটা তোলে নেই পৃথক বিকল্প একটি সেট মানে যে পরিবর্তন হতে বাধ্য

নীচে লাইন, এটি আপনার সেট করা উচিত সর্বনিম্ন সর্বনিম্ন সতর্কতা সম্পর্কে। আরও -Wall -Wextraভাল, এটি এখনও আপনার সংকলকটি যা করতে পারে তা যাচাই করে সমস্ত ত্রুটি ব্যবহার করছে না।


ব্যক্তিগতভাবে আমি এর চেয়ে কম যাই না -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual। আমার সমস্ত বর্তমান প্রকল্পগুলি আসলে এর চেয়ে দীর্ঘ সতর্কতার একটি তালিকা ব্যবহার করে (তাদের কোনওটিই ট্রিগার না করে)। এবং আমি নতুন বিকল্পগুলির জন্য প্রতিটি বড় রিলিজে ম্যানুয়ালটি পরীক্ষা করি। সংকলকটি আপনার বন্ধু। এটি আপনাকে যা ডায়াগনস্টিক দিতে পারে তা ব্যবহার করুন।


আমি সি ++ ব্যবহার করে প্রোগ্রামিং শিখতে শুরু করেছি। আমি প্রোগ্রামিং নীতিগুলি ব্যবহার করছি এবং সিপিসি ব্যবহার করে অনুশীলন করছি । আমার সিস্টেমটি উবুন্টু 16.04, আমি আমার সম্পাদক হিসাবে vscode ব্যবহার করি। -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualআমি g++ -std=c++11যখন সি ++ এবং প্রোগ্রামিং শিখি তখন সংকলনকালে আপনার ব্যবহারের জন্য আমাকে পরামর্শ দিন ? বা এই অংশটি এড়িয়ে যাওয়া উচিত এবং পরে ত্রুটি বার্তাগুলি পতাকা ব্যবহার করা শুরু করা উচিত? যদি তাই হয় তবে আমি কখন ত্রুটি বার্তাগুলি দিয়ে শুরু করব?
বৈজ্ঞানিক_এক্সপ্লোরার

4
@vkv: আমি বিশ্বাস করি যে সংকলকটি সত্যই আপনার বন্ধু এবং আপনার দেওয়া প্রতিটি ভাল পরামর্শের সুযোগ নেওয়া উচিত।
দেবসোলার

6

এটি এমন সতর্কতাগুলিকে সক্ষম করে যা কার্যকর এবং হিসাবে বিবেচিত হয় জিসিসি লেখকদের উত্স থেকে এড়ানো সহজ । এছাড়াও -ডব্লিউ (নতুন রিলিজগুলিতে ওয়েক্সট্রা) রয়েছে যা দরকারী বলে মনে করা হয় তবে যার জন্য কাজের আশেপাশে মিথ্যা ধনাত্মকতা কঠিন হতে পারে বা আনাড়ি কোডের ফলস্বরূপ।

জিসিসিতে অন্যান্য সতর্কতাগুলির একটি গুচ্ছও রয়েছে, সাধারণত কম কার্যকর। Http://gcc.gnu.org/onlinesocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Otions দেখুন


2

এটা enables most warning messages

আপনি যদি ব্যবহার করেন তবে আরও জানতে পারবেন g++ --help=warnings


0

এটি সমস্ত সতর্কতা সক্ষম করে। ("সমস্ত সতর্কতা" হিসাবে পড়ে)


এটি সক্ষম করে না এমন অনেকগুলি সতর্কতা রয়েছে (যেমন ভার্চুয়াল পদ্ধতিগুলির সাথে ক্লাসে নন ভার্চুয়াল ডটর)।
বি

ইউভালের উত্তর দেখুন: -Wall"সমস্ত সতর্কতা" এর পরিবর্তে কেবল "সর্বাধিক সতর্কতা" অর্থ means
হেক্সট্রেজ

-1

এটি সমস্ত সতর্কতা দেখায়। আমি -pedanticকোডের কিছু অ-সঙ্গতিপূর্ণ অংশ সম্পর্কে সতর্ক করতে ব্যবহার করার পরামর্শ দেব recommend


জিসিসি ডকের জন্য: "কিছু ব্যবহারকারী কঠোর আইএসও সি কনফারেন্সের জন্য প্রোগ্রামগুলি পরীক্ষা করার জন্য -পেনডেন্টিক ব্যবহার করার চেষ্টা করেন They তারা শীঘ্রই আবিষ্কার করেছেন যে এটি তাদের যা চান তা তেমন করে না: এটি কিছু নন-আইএসও অনুশীলনগুলি খুঁজে পেয়েছে, তবে সমস্তগুলিই নয় - কেবল তাদের জন্য আইএসও সি এর জন্য একটি ডায়াগোনস্টিক প্রয়োজন হয় এবং আরও কিছু অন্যের জন্য ডায়াগনস্টিক যুক্ত করা হয়েছে। "
এপ্রোগ্রামার

এটি 100% গ্যারান্টি দেয় না, তবে এটি সহায়তা করে।
কিরিল ভি লিয়াডভিনস্কি

4
আপনি যদি " সমস্ত অ-সঙ্গতিপূর্ণ অংশ সম্পর্কে সতর্ক করতে" তে সবার পরিবর্তে কিছু না লিখে থাকেন তবে আমি মন্তব্য করব না। তবে আপনার বর্তমান সূত্রটি ভ্রান্ত ধারণাটি ছড়িয়ে দিয়েছে জিসিসি ডকুমেন্টেশনের বিরুদ্ধে সতর্ক করা হয়েছে।
এপ্রোগ্রামার

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