“G ++ -Wall test.cpp -o test” में “-वॅल” क्या करता है?


92

-उत्पादन फ़ाइल नाम बदलता है (मैंने पाया है कि --help का उपयोग करके)

लेकिन मुझे पता नहीं चला कि क्या -Wallहोता है?


7
आपके कंसोल पर "मैन जीसीसी" आपको इस ध्वज के बारे में सब कुछ बताता है और साथ ही "जीसीसी -वेल" के साथ एक सरल Google खोज ...
डेविड

एक सामान्य टिप के रूप में, manकार्यक्रमों के लिए प्रविष्टियों को पढ़ने का प्रयास करें यदि आप जानना चाहते हैं कि स्विच क्या करता है, या क्या स्विच उपलब्ध हैं। के manपृष्ठ linux.die.net/man/1/gccgcc पर पढ़ा जा सकता है - आप पाठ के लिए एक त्वरित खोज कर सकते हैं "-Wall"
gnud

6
@ डेविड Sauter, Google को "-wall" के साथ कुछ भी नहीं मिलेगा। यह खोज से सभी "दीवार" को बाहर कर देगा।
किरिल वी। लयाडविंस्की

@Kirill नहीं यदि आप उद्धरण का उपयोग करते हैं, जैसे मैं अनुमान लगा रहा हूं डेविड मतलब
gnud

1
//, मैंने हमेशा सोचा कि यह लैरी वॉल के लिए एक श्रद्धांजलि थी।
नाथन बसानी

जवाबों:


110

यह "सभी को चेतावनी" के लिए छोटा है - यह (लगभग) सभी चेतावनियों को चालू करता है जो जी ++ आपको बता सकते हैं। आमतौर पर एक अच्छा विचार, खासकर यदि आप एक शुरुआत कर रहे हैं, क्योंकि उन चेतावनियों को समझना और ठीक करना आपको अपने कोड में विभिन्न प्रकार की समस्याओं को ठीक करने में मदद कर सकता है।


24
अधिक चेतावनी (जिनमें से कुछ बहुत उपयोगी हैं) को चालू किया जा सकता है -Wextraऔर -pedantic
ग्नुद

7
यह (लगभग) सब नहीं है। यह वास्तव में उपलब्ध चेतावनियों का केवल एक छोटा सा अंश है। यह वही है जो "सभी" पर सहमत हैं। वास्तव में अच्छा विचार करने के लिए है -Wall -Wextra, और फिर मैनुअल सोचना कई के रूप में पता लगाने के लिए और अधिक , क्योंकि भले चेतावनी आप जल्द सक्षम हो सकता है -Wextraकेवल एक छोटे सबसेट है ...
DevSolar

@DevSolar बहुत अच्छी बात है। क्या आपको पता है कि "वास्तव में सभी चेतावनियों" का मतलब एक झंडा है ?
MatrixFrog

1
@ मेट्रिक्सफ्रॉग: दुर्भाग्य से, ऐसा कोई विकल्प नहीं है, कम से कम उन कंपाइलरों के लिए नहीं जिन्हें मैं जानता हूं। और समय के साथ उपलब्ध चेतावनियों की सूची बदल जाती है ... अगर -Wunreachable-codeकुछ समय पहले जीसीसी टीम अक्षम नहीं होती , तो Apple इन दिनों बहुत खुश होता । ;-)
DevSolar

36

आदमी जीसीसी देखें।

-Wall इन चेतावनियों पर बदल जाता है:

-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)

कई और चेतावनियाँ हैं जिन्हें आपको स्पष्ट रूप से चालू करना होगा।

हमारे सी कोड के लिए हम उपयोग करते हैं:

-वेल -वैक्रा -वॅगेट-रिटर्न -वॉक-अलाइन -वोक-क्वॉल -Wdisabled-ऑप्टिमाइजेशन -वडि-बाय-शून्य -वेंडिफ-लेबल्स -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-in -Wlogical-op -Werror = लापता-ब्रेसिज़ -विस्मरण-घोषणाएँ -पॉइंट्टर-एरीथ -compat -Werror = घोषणा-पश्चात कथन

या सिर्फ https://www.gnu.org/software/autoconf-archive/ax_compiler_flow.html के साथ चेतावनी का सेट


19

अफसोस की बात है कि कोई भी उत्तर पुस्तिका के वास्तव में प्रासंगिक हिस्से को उद्धृत नहीं करता है, जो वास्तव में इसे एक बिंदु पर लाता है:

यह उन निर्माणों के बारे में सभी चेतावनियों को सक्षम करता है जिन्हें कुछ उपयोगकर्ता संदिग्ध मानते हैं, और जो मैक्रोज़ के साथ मिलकर भी (या चेतावनी को रोकने के लिए) संशोधित करने से बचना आसान है।

[...]

ध्यान दें कि कुछ चेतावनी झंडे द्वारा निहित नहीं हैं -Wall। उनमें से कुछ निर्माणों के बारे में चेतावनी देते हैं कि उपयोगकर्ता आमतौर पर संदिग्ध नहीं मानते हैं, लेकिन जो कभी-कभी आप जांचना चाहते हैं; अन्य लोग ऐसे निर्माणों के बारे में चेतावनी देते हैं जो कुछ मामलों में बचने के लिए आवश्यक या कठिन हैं, और चेतावनी को दबाने के लिए कोड को संशोधित करने का कोई सरल तरीका नहीं है। उनमें से कुछ सक्षम हैं, -Wextra लेकिन उनमें से कई को व्यक्तिगत रूप से सक्षम किया जाना चाहिए।

Ergo:

  • -Wallकरता नहीं "सभी चेतावनियों" मतलब है।
  • इसका मतलब यह भी नहीं है "(लगभग) सभी", लंबे शॉट से नहीं।
  • यह है अलग-अलग विकल्पों में से एक सेट मतलब है कि बदलने के लिए बाध्य है

निचला रेखा, यह आपके द्वारा निर्धारित की गई न्यूनतम चेतावनी के बारे में है। जबकि -Wall -Wextraयह बेहतर है, यह अभी भी सभी त्रुटि का उपयोग नहीं कर रहा है जो आपके संकलक की जांच आपके लिए कर सकता है।


व्यक्तिगत रूप से मैं इससे कम के लिए नहीं जाऊंगा -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual। मेरी सभी वर्तमान परियोजनाएं वास्तव में चेतावनी की एक सूची का उपयोग करती हैं जो इससे कहीं अधिक है (उनमें से किसी को भी ट्रिगर किए बिना)। और मैं नए विकल्पों के लिए हर प्रमुख रिलीज पर मैनुअल की जांच करता हूं। संकलक आपका मित्र है। जो भी डायग्नोस्टिक्स आपको उपयोग कर सकता है, उसका उपयोग करें।


मैंने C ++ का उपयोग करके प्रोग्रामिंग सीखना शुरू कर दिया है। मैं cpp का उपयोग करते हुए प्रोग्रामिंग सिद्धांतों और अभ्यास का उपयोग कर रहा हूं । मेरा सिस्टम ubuntu 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? या मुझे इस भाग को छोड़ देना चाहिए और बाद में त्रुटि संदेशों के झंडे का उपयोग करना शुरू कर देना चाहिए? यदि हां, तो मुझे त्रुटि संदेशों के साथ कब शुरू करना चाहिए?
वैज्ञानिक_एक्सप्लोरर

2
@vkv: मेरा मानना ​​है कि कंपाइलर वास्तव में आपका दोस्त है, और आपको हर अच्छी सलाह का फायदा उठाना चाहिए जो यह आपको दे सकती है।
देवसोलर

6

यह चेतावनियों द्वारा स्रोत से बचने के लिए उपयोगी और आसान समझी जाने वाली चेतावनियों को सक्षम बनाता है । वहाँ भी है -W (नए रिलीज में -Wextra) जो उपयोगी समझे जाते हैं लेकिन जिनके लिए काम-आसन्न झूठी सकारात्मकता मुश्किल हो सकती है या अनाड़ी कोड का परिणाम हो सकता है।

gcc में अन्य चेतावनियों का एक समूह भी होता है, जो आमतौर पर कम उपयोगी होते हैं। Http://gcc.gnu.org/oniltocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options देखें


2

यह enables most warning messages

यदि आप उपयोग करते हैं तो आप और अधिक जानकारी प्राप्त कर सकते हैं g++ --help=warnings


0

यह सभी चेतावनियों को सक्षम बनाता है। ("वार्निंग ऑल" के रूप में पढ़ता है)


वास्तव में बहुत सारी चेतावनियाँ हैं जो इसे सक्षम नहीं करती हैं (जैसे कि आभासी तरीकों के साथ एक कक्षा में गैर-द्वीपीय dtor)।
मार्क बी

युवल का उत्तर देखें: -Wall"सभी चेतावनियों" के बजाय "अधिकांश चेतावनियों" का अर्थ है।
हेक्सट्राज

-1

यह सभी चेतावनियों को दर्शाता है। मैं भी -pedanticकोड के कुछ गैर-अनुरूप भागों के बारे में चेतावनी देने के लिए उपयोग करने की सलाह दूंगा।


Gcc doc के लिए: "कुछ उपयोगकर्ता सख्त आईएसओ सी अनुरूपता के लिए कार्यक्रमों की जांच करने के लिए उपयोग करने के लिए प्रयास करते हैं। वे जल्द ही पाते हैं कि यह काफी ऐसा नहीं करता है जो वे चाहते हैं: यह कुछ गैर-आईएसओ प्रथाओं को ढूंढता है, लेकिन सभी-केवल जिनके लिए नहीं आईएसओ सी के लिए एक नैदानिक ​​की आवश्यकता होती है, और कुछ अन्य जिनके लिए निदान जोड़ा गया है। "
एपीग्रामग्राम

यह 100% गारंटी नहीं देता है, लेकिन यह मदद करता है।
Kirill V. Lyadvinsky

1
आप नहीं लिखा था, तो कुछ के बजाय सभी "के बारे में चेतावनी देने के लिए में सभी गैर अनुरूप भागों", मैंने टिप्पणी की है नहीं होगा। लेकिन आपका मौजूदा फॉर्म्युलेशन गलत धारणा को फैलाता है, जिसके खिलाफ जीसीसी डॉक्यूमेंटेशन चेतावनी देता है।
एपीग्रामग्राम

फिक्स्ड। लेकिन व्यवहार में यह "अधिकांश" जैसा दिखता है और "कुछ" नहीं।
किरिल वी। लयाडविंस्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.