সি [বদ্ধ] জন্য প্রস্তাবিত জিসিসি সতর্কতা বিকল্পগুলি


83

-আমি ছাড়াও কী কী সতর্কবার্তা লোকদের দরকারী বলে মনে হয়েছে?

http://gcc.gnu.org/onlinesocs/gcc-4.3.2/gcc/Warning-Options.html

উত্তর:


48

আমি নিয়মিত ব্যবহার করি:

এই সেটটি এতে অব্যবহৃত লোকদের জন্য প্রচুর পরিমাণে ধরা পড়ে (যাদের কোডগুলি আমি এই পতাকাগুলি প্রথমবারের সাথে সংকলন করতে পারি); এটি খুব কমই আমাকে একটি সমস্যা দেয় (যদিও -ভ্যাসক্ট-কোয়েল মাঝে মাঝে উপদ্রব হয়)।


4
এই দিনগুলিতে, আমি খুঁজে পেয়েছি -Wdeclaration-after-statementযে এমএসভিসি (যা এখনও মূলত একটি সি 89 সংকলক) হ্যান্ডেল করবে না এমন কোড সনাক্ত করার জন্য আমাকে ' ' যুক্ত করতে হবে। 'এটি একটি উপদ্রব। ' -Wextra' যোগ করা কিছু অন্যান্য সমস্যাও চিহ্নিত করতে পারে।
জোনাথন লেফলার

4
এছাড়াও, এটি যুক্ত করা -O3বা অনুরূপ কিছু যুক্ত করা ভাল ধারণা ; কোডটি অনুকূলিতকরণের সময় এমন সতর্কতা রয়েছে যা উত্পন্ন হয়।
জোনাথন লেফলার

4
জিসিসি ডক অনুসারে, সতর্কতা স্পট করার জন্য -O2 হ'ল সেরা। আমি নিশ্চিত নই যদি -O3 -O2 বোঝায় বা আরও সতর্কতা উত্পন্ন করার অনুমতি দেয়।
অফিরমো

4
আপনি যদি 64-বিট পরিবেশে না থাকেন -m64 এড়িয়ে যান।
টোর ক্লিংবার্গ

4
উভয় -m32 এবং -m64 (পৃথক রানের ক্ষেত্রে অবশ্যই) আপনি যেভাবে ব্যবহার করেন printf()এবং scaf()রূপান্তরকরণের নির্দিষ্টকরণের পদ্ধতিতে বিভিন্ন বাগ থেকে আরও ভাল সুরক্ষা সরবরাহ করে ।
জোনাথন লেফলার

41

২০১-0-০৯-২০১১ খ্রিস্টাব্দে, জিসিসি সংস্করণ 4.6.1 সহ

আমার বর্তমান "বিকাশ" ওরফে

gcc -std = c89 -প্যাডেন্টিক-ওয়াল \
    -নো-অনুপস্থিত-ধনুর্বন্ধনী-ওয়েক্স্রা-নো-অনুপস্থিত-ফিল্ড-ইনিশিয়ালাইজারস -ওয়ারফর্ম = 2
    -উইচইচ-ডিফল্ট -Wwwitch-enum -Wcast-align -Wpointer-arith \
    -ডাব্লিউড-ফাংশন-কাস্ট -স্ট্রিট-ওভারফ্লো = 5 -স্ট্রিস্ট-প্রোটোটাইপস-উইনলাইন \
    -উন্ডফ-ওয়েস্টড-এক্সটার্নস -ডাব্ল্যাড-কোয়েল -শ্যাডো-ওয়ানরেচেবল-কোড \
    -তাত্ত্বিক-আপ -Wfloat-সমতুল্য -wstric-aliasing = 2 -আগ্রহ-ডানসাল ls
    -ভোল্ড-শৈলী-সংজ্ঞা -অগ্রহ \
    -ggdb3
    -O0
    -ফনো-ওমিট-ফ্রেম-পয়েন্টার -ফ্লোট-স্টোর -ফ্নো-কমন -স্ট্রিক্ট-এলিয়াসিং \
    -এলএম

"মুক্তি" ওরফে

gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm

2009-11-03 পর্যন্ত

"উন্নয়ন" ওরফে

gcc -Wall -Wextra -Wformat = 2 -Wwwwitc-default -Wcast-align -Wpointer-arith \
    -উবাড-ফাংশন-কাস্ট -স্ট্রিস্ট-প্রোটোটাইপস-উইনলাইন-ওয়ান্ডেফ-ওয়েস্টেড-এক্সটার্নস \
    -ডাব্লাইট-কোয়ালি -শ্যাডো -Wwrit-স্ট্রিংস-রূপান্তর-Wunreachable- কোড \
    -স্ট্রিট-এলিয়াসিং = 2 -ফ্লোট-স্টোর -ফ্নো-কমন -স্ট্রিট-এলিয়াসিং \
    -lm -std = c89 -pedantic -O0 -ggdb3 -pg - কভারেজ

"মুক্তি" ওরফে

gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwole-program -funrol-loops

4
-Wfloat-equalআমার উপন্যাস যুক্ত। ধন্যবাদ মার্ক
pmg

4
লক্ষ্য করুন -Wstrict-aliasing=2আসলে সতর্কতা স্তর কমে যায় -Wstrict-aliasing=3উহ্য দ্বারা -Wallজিসিসি একটি সাম্প্রতিক সংস্করণের সাথে, অন্তত।
nwellnhof

15

আমি পছন্দ করি কোড সতর্কতা মুক্ত রাখে।


21
-যুগল ব্যতীত অন্য সমস্ত সতর্কতা বিকল্প অর্থহীন। সতর্কতাগুলির ত্রুটি হিসাবে আচরণ করা সতর্কতাগুলির সমাধান হওয়ার একমাত্র উপায় is যদি তারা কেবল সতর্কতা হয় তবে কোনও বিকাশকারী তাকে ছেড়ে দেওয়ার সিদ্ধান্ত নিতে পারে কারণ তিনি নিশ্চিত যে এটি অবৈধ। এটি এমনকি সত্য হতে পারে তবে পরবর্তী বিকাশকারী তার যে সতর্কবাণীগুলি চালু করেছিলেন তা ঠিক করবে না কারণ তিনি এটি অন্য সকলের মধ্যে দেখতে পান নি, বা এটি কেবল আরও একটি সতর্কতা।
ক্রিস্টফ প্রোভস্ট

6
আমি ক্রিস্টফের সাথে একমত নই, কারণ অনেকবার, আমি বরং প্রথমে একটি ওয়ার্কিং কপি তৈরি করে তারপরে ত্রুটিগুলি সমাধান করব।
Yktula

9
আমি বুঝতে পারি যে এটি কেন লোভনীয়, তবে যখন / আপনার কাছে যদি একটি কাজের অনুলিপি থাকে তবে আপনি এটি ছেড়ে দেওয়ার সম্ভাবনা বেশি কারণ এটি "এটি কাজ করে"। এই ঝুঁকিটি কর্পোরেট পরিবেশে আরও বেশি, যেখানে আপনাকে সতর্কতাগুলি ঠিক করতে আপনার বসকে কিছুটা সময় ছেড়ে দিতে বাধ্য করতে হবে।
জেস্পেআর

4
আমি #warningব্যবহারের একটি ভাল পার্শ্ব প্রতিক্রিয়া পরিত্রাণ বিবেচনা -Werror
জেস্পেরি

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

15

আমি সি ++ দিয়ে শুরু করেছি, তাই যখন আমি সিআই শিখতে স্যুইচ করেছিলাম তখন অতিরিক্ত পায়ুসংক্রান্ত হওয়ার বিষয়টি নিশ্চিত করেছিলাম:

-ফিমেসেজ দৈর্ঘ্য = 0
-ansi -pedantic -std = c99
-যন্ত্র
- ওয়াল
-ভেক্সট্রা
-লিখন-স্ট্রিং
উইনিট-স্ব
-ভ্যাসক্ট - সারিবদ্ধ
-ভ্যাসক্ট-কোয়ালি
-উইপয়েন্টার-অ্যারিথ
-স্ট্রিট-আলিয়াসিং
-ফর্ম্যাট = 2
-মোহাদ-ঘোষণা
- স্মৃতি-অন্তর্ভুক্ত-ডায়ার
-না-অব্যবহৃত-প্যারামিটার
-উনিটায়ালাইজড
-বোল-স্টাইল-সংজ্ঞা
-স্ট্রিট-প্রোটোটাইপস
-মোহানো-প্রোটোটাইপস

4
আপনি একই সময়ে -ansi -pedantic -std = c99 ব্যবহার করতে পারেন? -আনসি কি আনুমানিক সি 98 হিসাবে একই জিনিস নয়? এবং যদি তা হয় তবে সি 99 পতাকাটি কীভাবে কাজ করবে?
জোহান

4
@ জোহান - আপনি এটি করতে পারেন এবং এটি আসলে প্রয়োজনীয় নয়, কারণ আমি সম্প্রতি খুঁজে পেয়েছি। -ansi সূচিত করে -std = <default>, সুতরাং সত্যিই আপনি কেবল -std = c99- বিভক্তিকর বলতে পারেন এবং ঠিক একই প্রভাব পেতে পারেন। আমি কেবল ডকুমেন্টেশন প্রভাবের জন্য এটি যেভাবেই হোক না কেন ব্যবহার করি। আমি অনুভব করি যে এটিতে লেখা আছে "স্ট্যান্ডার্ড সি 99 ব্যবহার করে এই কোডটি এএনএসআই-স্ট্যান্ডার্ড (পেডেন্টিক!)।" তত্ক্ষণাত্ পরে সাধারণত আসে -অনসো-দীর্ঘ-দীর্ঘ বা অনুরূপ ... এএনএসআই মানক কোনও ব্যতিক্রম।
টম

9

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

সংকলকটি আপনার বন্ধু। সতর্কতা আপনার বন্ধু হয়। কমপ্লায়ারকে যতটা সম্ভব সম্ভাব্য সমস্যার কথা বলার জন্য যথাসাধ্য সুযোগ দিন।


4
এফওয়াইআই, ম্যানুয়ালটি সতর্কতার একক বিস্তৃত তালিকা সরবরাহ করে না। তবে এগুলি তৈরি করার জন্য ব্যবহৃত সরঞ্জামগুলি সহ আপনি এখানে এই জাতীয় তালিকা পেতে পারেন ।
কাইল স্ট্র্যান্ড

5

আমিও ব্যবহার করি:

-স্ট্রিটিক-ওভারফ্লো = 5

ঐ কদর্য বাগ বুঝতে পারা করার পারেন ঘটতে যদি আমি কোডটি পূর্ণসংখ্যার ওভারফ্লো আচরণের উপর নির্ভর করে লিখুন।

এবং:

-ভেক্সট্রা

যা এমন কিছু বিকল্পকে সক্ষম করে যা ভালভাবে পছন্দ করে। বেশিরভাগ সি ++ এর জন্য।


4
-ওয়েক্সট্রা -W এর নতুন নাম বলে মনে হচ্ছে (যা এখনও সমর্থিত)
সার্ড

2

আমি সাধারণত "-W -Wall -ansi -pedantic" দিয়ে সংকলন করি যা কোডটির সর্বোচ্চ মানের এবং বহনযোগ্যতা নিশ্চিত করতে সহায়তা করে।


4
কেবল একটি নোট-ওয়ানসিড-ওয়ানড্রাইড
সার্ড

4
-Ansi -std = c89 ব্যবহারের সমতুল্য নয়?
হেল্পর্মোথড

2

-পেনডেন্টিক -ওয়াল-ওয়েক্সট্রা -নো-রাইটিং-স্ট্রিং -নো-অব্যবহৃত-প্যারামিটার

"আমাকে প্রচুর হিট করুন" মোডের জন্য, আমি -আমি ছেড়ে চলে যাই ...

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


4
কারণ সরঞ্জামচইন কেবলমাত্র পঠনযোগ্য মেমরিতে স্ট্রিং লিটারালগুলি রাখার স্বাধীনতা।
দেবসোলার

4
কেন-না-অব্যবহৃত-প্যারামিটার? খুব কমই এটি সত্যিকারের সমস্যাগুলির দিকে ইঙ্গিত করে (এবং "খুব কমই" এটি অক্ষম করার সাথে সঠিক বিপদ: অকার্যকর বাগগুলি সনাক্ত করা সবচেয়ে খারাপ)। উদাহরণস্বরূপ, স্প্রিট করতে পারে Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}-> তুলনামূলকভাবে স্পট। আপনি যদি সেই সতর্কবাণীতে বিরক্ত হন তবে আপনার প্যারামিটারটি সহজেই ছাঁটাই করা উচিত foo (int /*q*/), এটি আপনার কোডের পঠনযোগ্যতা বৃদ্ধি করে।
সেবাস্তিয়ান মাচ

Refactoring সময় আমি কখনও কখনও একটি স্থানীয় সঙ্গে ভুল করে প্যারামিটার ছায়াবৃত্ত করেছি, এটা ক্যাচ সাহায্য করে খুব
paulm

1

-প্যান্টিক-ত্রুটি


4
@ ইউনেক্সিস্ট ইনস্টল করার চেষ্টা করুন clang(এলএলভিএম প্রকল্পের সি সংকলক) এবং তারপরে সংকলন করুন -Weverythingএবং আপনি দেখতে পাবেন মচ মজাদার সংকলন কীভাবে সত্যই পরিণত হতে পারে (কিছু সতর্কতা সম্পূর্ণ উন্মাদ, তবুও তারা প্রযুক্তিগতভাবে সঠিক)।
মক্কি


1

-আগ্রহ-ড্যান্সলস-ওয়েস্টেড-এক্সটার্নস -স্ট্রিট-প্রোটোটাইপস-ওয়েক্স্রা-ওয়ারার-ইনপিলিট-ফাংশন-ডিক্লারেশন -উনিউজড -ভন-অব্যবহৃত-মান-রাইটার্ন-টাইপ


1

এখনই আমি ব্যবহার:

-ওয়াল -ডাব্লু-ওয়েক্সট্রা -উইনসভারশন -শ্যাডো -ডাব্লাইট-কোয়েল -লিখন-স্ট্রিংস-ওয়ারার

আমি সেই তালিকাটি বেশিরভাগ " জিসিসি- তে একটি পরিচিতি" বই থেকে এবং তারপরে ডিফেন্সিভ প্রোগ্রামিংয়ের সম্পর্কে উলরিচ ড্রেপার পুনঃসংশোধন থেকে কিছু গ্রহণ করেছি ( http://people.redhat.com/drepper/Defender-slides.pdf ) ।

তবে আমার তালিকার পিছনে আমার কোনও বিজ্ঞান নেই, এটি কেবল একটি ভাল তালিকার মতো মনে হয়েছিল।

/ জোহান


দ্রষ্টব্য: যদিও আমি এই পেডেন্টিক পতাকাগুলি পছন্দ করি না ...

দ্রষ্টব্য: আমি মনে করি যে -W এবং -Wextra কম-বেশি একই জিনিস।


4
আফার -ডু রূপান্তরটি ব্যবহার করে, এবং আমার কোড এবং পুনর্নির্মাণে বিভিন্ন ডেটা ধরণের পরীক্ষার জন্য কয়েক ঘন্টা ব্যয় করে আমি -Wconversion গবেষণা করেছি এবং সাধারণভাবে এটি ব্যবহার করার পরামর্শ দেব না। সমস্যাটি কোড সম্পর্কে সতর্কতা উত্পন্ন করে যেমন: চর a = 5; চর b = a - 1; এটি জিসিসি ৪.৩.২ ব্যবহার করছে (দেবিয়ান ৪.৩.২. -১.১)
জেমস মরিস

4
-দলের রূপান্তর সতর্কতাগুলি এর মাধ্যমে মুছে ফেলা যায় (উদাহরণস্বরূপ উপরের মন্তব্যে): চর a = 5; চর বি = (চর) (ক - 1); নোট বন্ধনী
জেমস মরিস 19

1

আমি সাধারণত ব্যবহার করি


1

অনির্ধারিত ভেরিয়েবলগুলি সম্পর্কে সতর্কতা কার্যকর না করে যতক্ষণ না আপনি উল্লেখ করেন -O, তাই আমি এটিকে আমার তালিকায় অন্তর্ভুক্ত করি:


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