সি এর জন্য দরকারী জিসিসি পতাকা


157

সেটিং -Wallএবং সেটিং এর বাইরে -std=XXXঅন্য কোন সত্যিকারের দরকারী, তবে কম পরিচিত সংকলক পতাকাগুলি সি-তে ব্যবহারের জন্য রয়েছে?

আমি কোনও অতিরিক্ত সতর্কতাগুলিতে বিশেষভাবে আগ্রহী, এবং / অথবা এবং কোনও ক্ষেত্রে দুর্ঘটনাজনিত ধরণের অমিলকে একেবারে হ্রাস করার জন্য সতর্কতাগুলিকে ত্রুটিতে পরিণত করি।


9
হ্যাঁ -save-temps, -Wshadowএবং -fmudflapসেই সর্বকালের সেরা সন্ধানগুলি আমি জানতাম না, সকলকে ধন্যবাদ।
ম্যাট জয়েনার

প্রসঙ্গ, যতদূর আমি বলতে পারি: gcc -c [flags-go-here] -o myprog.o myprog.cএকটি সি প্রোগ্রাম সংকলন করতে ( চলমান নয়) চলছে ।
ররি ও'কেনে

উত্তর:


64

-fকোড তৈরির কয়েকটি বিকল্প আকর্ষণীয়:

  • -ftrapvফাংশন প্রোগ্রাম স্বাক্ষরিত পূর্ণসংখ্যা ওভারফ্লো (আনুষ্ঠানিকভাবে "অনির্ধারিত আচরণ" সি মধ্যে) উপর টি থামিয়ে দিতে হবে।

  • -fverbose-asmআপনি যদি -Sসমাবেশের আউটপুট পরীক্ষা করতে সংকলন করে থাকেন তবে এটি কার্যকর - এটি কিছু তথ্যমূলক মন্তব্য যুক্ত করে।

  • -finstrument-functions প্রতিটি ফাংশন এন্ট্রি এবং প্রস্থান স্থলে ব্যবহারকারী সরবরাহিত প্রোফাইলিং ফাংশনগুলিতে কল করতে কোড যুক্ত করে।


কারণ -ftrapvএখানে stackoverflow.com/questions/20851061/… দেখুন ... মনে হচ্ছে ঠিক আছে একটি বাগ দীর্ঘ অপেক্ষারত আছে।
অর্জুন শ্রীধরণ

আপনি উপরের মন্তব্য পরীক্ষা করতে পারেন?
সুরজ জৈন

-frapitv মূলত -fsanitize = স্বাক্ষরিত-পূর্ণসংখ্যার-ওভারফ্লো দ্বারা ত্যাগ করা হয়েছিল।
মার্ক গ্লিস

139

এখানে আমার:

  • -Wextra, -Wall: অপরিহার্য।
  • -Wfloat-equal: দরকারী কারণ সমতার জন্য সাধারণত ভাসমান-পয়েন্ট সংখ্যা পরীক্ষা করা খারাপ।
  • -Wundef: সতর্কতা অবলম্বন করুন যদি কোনও #ifনির্দেশে কোনও অবিজ্ঞানী চিহ্নিতকারীকে মূল্যায়ন করা হয় ।
  • -Wshadow: সতর্কতা যখনই কোনও স্থানীয় ভেরিয়েবল অন্য স্থানীয় ভেরিয়েবল, প্যারামিটার বা গ্লোবাল ভেরিয়েবল বা যখন কোনও বিল্ট-ইন ফাংশন ছায়াযুক্ত থাকে তখনই shad
  • -Wpointer-arith: কোনও ফাংশন বা এর আকারের উপর যদি কিছু নির্ভর করে তবে সতর্ক করুন void
  • -Wcast-align: সতর্ক করুন যখনই কোনও পয়েন্টার এ জাতীয় কাস্ট করা হয় যাতে লক্ষ্যটির প্রয়োজনীয় প্রান্তিককরণ বৃদ্ধি হয়। উদাহরণস্বরূপ, সতর্কতা অবলম্বন করুন যদি char *এমন কোনও int *মেশিনে কাস্ট করা হয় যেখানে দুটি বা চার-বাইট সীমানায় কেবল পূর্ণসংখ্যক অ্যাক্সেস করা যায়।
  • -Wstrict-prototypes: আর্গুমেন্টের ধরণগুলি নির্দিষ্ট না করে কোনও ফাংশন ঘোষণা বা সংজ্ঞায়িত করা হলে সতর্ক করুন
  • -Wstrict-overflow=5: সংক্ষিপ্ত ওভারফ্লো ঘটে না এমন অনুমিতির উপর ভিত্তি করে সংকলকটি অনুকূলিত করে এমন ক্ষেত্রে সম্পর্কে সতর্ক করে। (5 মানটি খুব কঠোর হতে পারে, ম্যানুয়াল পৃষ্ঠাটি দেখুন))
  • -Wwrite-strings: স্ট্রিং কনস্ট্যান্টগুলি টাইপের const char[দৈর্ঘ্য দিন] যাতে একটির ঠিকানাটি অন- const char *পয়েন্টারে অনুলিপি করা একটি সতর্কতা পেতে পারে।
  • -Waggregate-return: কাঠামো বা ইউনিয়নগুলি ফেরত দেওয়া এমন কোনও ফাংশন সংজ্ঞায়িত বা বলা হয় কিনা তা সতর্ক করুন।
  • -Wcast-qual: লক্ষ্য টাইপ * থেকে টাইপ কোয়ালিফায়ার অপসারণের জন্য যখনই কোনও পয়েন্টার কাস্ট করা হয় তখন সতর্ক করুন ।
  • -Wswitch-default: সতর্কতা যখনই কোনও switchবিবৃতিতে defaultমামলা না থাকে *
  • -Wswitch-enum: সতর্ক যখনই কোন switchবিবৃতি গণিত ধরনের একটি সূচক আছে এবং একটি অভাব আছে caseএক জন্য বা যে শুমার নামে কোডের আরো *
  • -Wconversion: অন্তর্ভুক্ত রূপান্তরগুলির জন্য সতর্ক করুন যা কোনও মান * পরিবর্তিত করতে পারে ।
  • -Wunreachable-code: সাবধান করে যদি সংকলকটি সনাক্ত করে যে কোডটি কখনই কার্যকর করা হবে না *

চিহ্নিত হিসাবে চিহ্নিত * কখনও কখনও অনেক বেশি উত্সাহী সতর্কতা দেয়, তাই আমি এগুলি প্রয়োজনীয় ভিত্তিতে ব্যবহার করি।


11
বেশ সম্পূর্ণ তালিকা, আরও একটি যোগ করতে চান; -Wformat=2: প্রিন্টফ / স্ক্যানফ ফাংশনগুলিতে অতিরিক্ত ফর্ম্যাট চেক।
স্কট

1
এই সব দ্বারা নিহিত -Wall?
chacham15

2
@ চাচাম ১৫, না, আমি তা মনে করি না। gcc.gnu.org/onlinesocs/gcc/Warning-Options.html
অলোক

1
@ অলোক হুঁ, সম্ভবত এটি বিতরণগুলির মধ্যে আদর্শ নয়? আমি জানি যে আমার এমবিপিতে আমাকে স্পষ্টভাবে বন্ধ করতে হবে -Wwrite-stringsকারণ আমি এটিকে এত ঘৃণা করি।
chacham15

@ চাচাম ১৫, সম্ভবত তবে বর্ণনার জন্য -Wwrite-stringsনির্দিষ্টভাবে বলা হয়েছে যে এটি এর কোনও অংশ নয় -Wall: gcc.gnu.org/onlinesocs/gcc/… । হতে পারে আপনার সেটআপের অন্য কোনও কিছু সেই পতাকাটি সেট করছে? অথবা আপনি C ++ সংকলন করছেন?
অলোক সিংহল

52

সর্বদা ব্যবহার -Oঅথবা উপরে ( -O1, -O2, -Os, ইত্যাদি)। ডিফল্ট অপ্টিমাইজেশন স্তরে, গিসি সংকলনের গতির জন্য যায় এবং ইউনিটিয়ালাইজড ভেরিয়েবলের মতো জিনিস সম্পর্কে সতর্ক করতে পর্যাপ্ত বিশ্লেষণ করে না।

-Werrorনীতি তৈরির বিষয়টি বিবেচনা করুন , কারণ সংকলন বন্ধ না করে এমন সতর্কতাগুলি এড়ানো হবে।

-Wall ত্রুটি হওয়ার সম্ভাবনা রয়েছে এমন সতর্কবাণীগুলিতে খুব বেশি পরিবর্তন ঘটে।

সতর্কতাগুলি -Wextraসাধারণ, বৈধ কোডে পতাকাঙ্কিত করে। কোড পর্যালোচনার জন্য এগুলি দরকারী হতে পারে (যদিও লিট-স্টাইলের প্রোগ্রামগুলি আরও অনেক বেশি ক্ষতি আরও নমনীয় করে) তবে আমি সাধারণ বিকাশের জন্য এগুলি চালু করব না।

-Wfloat-equal প্রকল্পের বিকাশকারীরা ভাসমান পয়েন্টের সাথে অপরিচিত এবং তারা যদি খারাপ ধারণা থাকে তবে এটি একটি ভাল ধারণা।

-Winit-selfদরকারী; আমি কেন এটি অন্তর্ভুক্ত করা হয়নি তা অবাক -Wuninitialized

-Wpointer-arithযদি আপনার বেশিরভাগ পোর্টেবল কোড থাকে যা কার্যকর হয় না তবে তা কার্যকর -pedantic


9
প্রকল্পের বিকাশকারীরা যদি ভাসমান পয়েন্টের সাথে অপরিচিত এবং তারা যদি থাকে তবে একটি খারাপ ধারণা যদি "-ফ্লাট-সমান" এর জন্য +1 হয় তবে এটি একটি ভাল ধারণা। বিশেষত এর দ্বিতীয়ার্ধে :-)
আর .. গিথহাব থামার সহায়তা ICE

39
-save-temps

এটি প্রিপ্রসেসর এবং অ্যাসেমব্লির ফলাফলকে পিছনে ফেলে।

প্রাকপ্রসেসেড উত্সটি ম্যাক্রো ডিবাগ করার জন্য দরকারী।

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


আপনি কীভাবে এটি করতে পেরেছিলেন তা আমি অবাক করে দিয়েছিলাম ... আমি সর্বদা জিসিসিকে বলেছিলাম যদি প্রয়োজন হয় তবে অ্যাসেম্বলিটি ফেলে দিতে পারি।

35

আমি অবাক হয়েছি কেউ এখনও এ কথা বলেনি - যতদূর আমি উদ্বিগ্ন সর্বাধিক দরকারী পতাকাটি হ'ল -gডিবগিং তথ্যকে এক্সিকিউটেবলের মধ্যে রাখে যাতে আপনি এটি ডিবাগ করতে পারেন এবং উত্সের মাধ্যমে পদক্ষেপ নিতে পারেন (যদি আপনি দক্ষ না হন এবং অ্যাসেম্বলি পড়েন এবং stepiকমান্ডের মতো ) যখন এটি কার্যকর হয় a


35

-fmudflap - ইউবি ধরতে সমস্ত ঝুঁকিপূর্ণ পয়েন্টার অপারেশনে রানটাইম চেক যুক্ত করে। এটি কার্যকরভাবে আপনার প্রোগ্রামটিকে আবার বাফার ওভারফ্লোগুলিকে টিকিয়ে রাখে এবং সমস্ত ধরণের ঝুঁকির পয়েন্টার ধরতে সহায়তা করে।

এখানে একটি ডেমো রয়েছে:

$ cat mf.c 
int main()
{
 int a[10];
 a[10]=1; // <-- o noes, line 4
}

$ gcc -fmudflap mf.c -lmudflap
$ ./a.out 
*******
mudflap violation 1 (check/write): time=1280862302.170759 ptr=0x7fff96eb3d00 size=44
pc=0x7f3a575503c1 location=`mf.c:4:2 (main)'
      /usr/lib/libmudflap.so.0(__mf_check+0x41) [0x7f3a575503c1]
      ./a.out(main+0x90) [0x400a54]
      /lib/libc.so.6(__libc_start_main+0xfd) [0x7f3a571e2c4d]
Nearby object 1: checked region begins 0B into and ends 4B after
mudflap object 0xf9c560: name=`mf.c:3:6 (main) a'
bounds=[0x7fff96eb3d00,0x7fff96eb3d27] size=40 area=stack check=0r/3w liveness=3
alloc time=1280862302.170749 pc=0x7f3a57550cb1
number of nearby objects: 1

হুম, মুডফ্ল্যাপটি দেখতে বেশ খারাপ লাগছে: পি
ম্যাট

9
-fmudflapজিসিসি ৪.৯-এর পরে আর সমর্থিত নয়, আপনি পান warning: switch '-fmudflap' is no longer supported। এটি অ্যাড্রেসস্যানিটাইজার দ্বারা ত্যাগ করা হয়েছিল।
অ্যাগ্রোস্টিনো

21

সত্যিই সি / সি ++ এর সাথে সম্পর্কিত নয়, তবে যাইহোক দরকারী:

@file

উপরের সমস্ত ভাল পতাকাগুলি (যা আপনি সমস্ত নির্দিষ্ট করেছেন) একটি 'ফাইল' এ রাখুন এবং এই ফাইলের সমস্ত পতাকা একসাথে ব্যবহার করতে এই উপরের পতাকাটি ব্যবহার করুন।

উদাহরণ:

ফাইল: সংকলক

-Wall

-std = C99

-Wextra

তারপরে সংকলন করুন:

gcc yourSourceFile @compilerFlags

15

-march=native আপনি যে প্ল্যাটফর্মটি সংকলন করছেন তার প্ল্যাটফর্মের জন্য অনুকূলিত কোড তৈরি করতে (= চিপ)


2
আপনি যদি অ-নেটিভ মেশিনগুলির জন্য সঙ্কলন করছেন যেখানে আপনি লক্ষ্যটি জানেন না, আপনি এমটিউন = এক্সএক্সএক্স ব্যবহার করতে পারেন যা নির্দেশ সেটগুলি ব্যবহার না করেই অনুকূলিত করে। উদাহরণস্বরূপ, এমটিউন = জেনেরিকটি "গড়" কেস প্রসেসরগুলির সাথে আপ টু ডেট থাকে।
টুরিক্স

15

আপনার যদি প্রাইলপ্রসেসর পতাকাগুলি জানতে প্রয়োজন যা সংকলক দ্বারা পূর্বনির্ধারিত রয়েছে:

echo | gcc -E -dM -

13

এটি ত্রুটিগুলি সনাক্ত করার জন্য সত্যই সহায়ক নয়, তবে খুব কমই উল্লিখিত -masm=intelবিকল্পটি -Sসমাবেশের আউটপুটটি পরিদর্শন করতে অনেক বেশি সুন্দর ব্যবহার করে।

এটিএন্ডটি অ্যাসেমব্লির সিনট্যাক্স আমার মাথাকে অনেক বেশি ব্যথা করে।


2
আমার কাছে এটিএন্ডটি এবং ইন্টেলের মধ্যে পার্থক্য হ'ল সি # এবং জাভার পার্থক্য। শুধু সিনট্যাক্স। দু'জনেই ভয়ঙ্কর। :)
ম্যাট যোগদানকারী

2
জিসিসি তৈরির জন্য +1 @ মাইকেল, godশ্বরকে ভয়ঙ্কর না করে পরিবর্তে ইন্টেল সিনট্যাক্স ব্যবহার করুন। সমাবেশ পরিদর্শন করা পর্যাপ্ত মস্তিষ্কের চক্র ব্যবহার করে - মস্তিষ্কের চক্রগুলি নষ্ট করার দরকার নেই যা এসসিআর অপকডগুলিতে নিয়মের আগে চলে। এখন যদি কেবল জিসিসি অন্যান্য সংকলকগুলির মতো __asm ​​{} ইনলাইন সমর্থন করে তবে আমরা সবাই সেট করে রেখেছি!
গ্রেটওয়ल्फ

10

আমার মেকফিলটিতে সাধারণত থাকে

  CFLAGS= -Wall -Wextra -Weffc++ -Os -ggdb
  ...
  g++ $(CFLAGS) -o junk $<
  gcc $(CFLAGS) -o $@ $<
  rm -f junk

এই বিকল্পগুলির মধ্যে সবচেয়ে গুরুত্বপূর্ণটি আগে আলোচনা করা হয়েছে, সুতরাং আমি দুটি বৈশিষ্ট্যগুলি নির্দেশ করব যা এখনও পর্যন্ত নির্দেশিত হয়নি:

যদিও আমি এমন একটি কোডবেসে কাজ করছি যা কিছু প্ল্যাটফর্মের বহনযোগ্যতার জন্য প্লেইন সি হওয়া দরকার যার এখনও কোনও শালীন সি ++ সংকলক নেই, আমি সি ++ সংকলক (সি সংকলক ছাড়াও) দিয়ে একটি "অতিরিক্ত" সংকলন করি। এর 3 টি সুবিধা রয়েছে:

  1. সি ++ সংকলক মাঝেমধ্যে আমাকে সি সংকলকটির চেয়ে ভাল সতর্কবার্তা বার্তা দেয়।
  2. সি ++ সংকলক-ওয়েফসি ++ বিকল্পটি গ্রহণ করে, যা মাঝে মাঝে আমাকে কিছু দরকারী টিপস দেয় যা আমি কেবল এটিকে সরল সিতে সংকলন করলে মিস করতাম would
  3. আমি কোডটি অপেক্ষাকৃত সহজভাবে সি ++ তে বন্দরে রাখতে পারি, যেখানে সীমানা সি কোডটি অবৈধ সি ++ কোড (যেখানে "বুল" নামক একটি ভেরিয়েবল সংজ্ঞায়িত করা হয়) এমন কয়েকটি সীমানা শর্ত এড়িয়ে চলে।

হ্যাঁ, আমি আশাহীনভাবে আশাবাদী পলিয়েন্না যা ভাবতে থাকে যে এখন যে কোনও মাসে অবশ্যই একটি প্ল্যাটফর্ম অপ্রচলিত ঘোষণা করা হবে, বা একটি শালীন সি ++ সংকলক অর্জন করবে এবং শেষ পর্যন্ত আমরা সি ++ এ যেতে পারি। আমার মনে, এটি অনিবার্য - একমাত্র প্রশ্ন হ'ল ব্যবস্থাপনার আগে বা পরে শেষ পর্যন্ত সবাইকে একটি গোটার ইস্যু দেয় কিনা। :-)


এটি সি ++ হিসাবে লেখার একটি ভাল বিষয়, আমি এটি প্রায়শই বিবেচনা করি। (প্রাকৃতিকভাবে সাবসেট)
ম্যাট জেন্ডার

6
আমার উল্লেখ করা উচিত যে সি ++ এর পক্ষে সি অবমানিত হওয়া কখনই ঘটবে না, দুঃখিত :)
ম্যাট জয়েনার

4
আরএম -f জাঙ্কের পরিবর্তে -o / দেব / নাল বিবেচনা করুন
উল্টিটকো

9
-Wstrict-prototypes -Wmissing-prototypes

10
এবং আপনার -Wold-style-definitionযদি প্রবর্তনকারীদের সাথে ডিল করতে হয় যারা কে ও আর স্টাইলের ফাংশনগুলি একটি ভাল ধারণা, এমনকি প্রোটোটাইপযুক্ত ঘোষণা দিয়েও। (আমি যে মত মানুষের সঙ্গে মোকাবেলা করতে হবে এটা সত্যিই আমার জন্য কষ্টদায়ক যখন আমি কে & R এর লেখা নতুন কোড পাবেন এটা খারাপ যথেষ্ট থাকার উত্তরাধিকার কে & R এর কাপড় যে সংশোধন করা হয় না, কিন্তু নতুন কোড Grump !!!।।!)
জোনাথন Leffler

9

এখানে একটি দুর্দান্ত পতাকা রয়েছে যা উল্লেখ করা হয়নি:

-Werror-implicit-function-declaration

ঘোষণার আগে যখনই কোনও ফাংশন ব্যবহৃত হয় তখন ত্রুটি দিন।


8
man gcc

ম্যানুয়ালটি ভাল বিবরণ সহ আকর্ষণীয় পতাকা পূর্ণ। তবে, -ওয়াল সম্ভবত জিসিসি যতটা সম্ভব ভার্বোজ তৈরি করবে। আপনি যদি আরও আকর্ষণীয় ডেটা চান তবে আপনার ত্রুটিগুলি পরীক্ষা করার জন্য ভালগ্রাইন্ড বা অন্য কোনও সরঞ্জামের দিকে নজর দেওয়া উচিত।


1
যদিও এটি লুওউউউউউউওউওউওউওউওউওউওউওং। man gcc | nl11000 লাইন উপর রিপোর্ট। এটি কুখ্যাত bashম্যানপেজের চেয়ে বেশি !
new123456

12
Godশ্বরকে ধন্যবাদ যে তারা godশ্বরহীন অদম্য "তথ্য" পৃষ্ঠাগুলির পরিবর্তে এটিকে একটি ম্যান পৃষ্ঠাতে ছড়িয়ে দিয়েছে।
ম্যাট জয়েনার

6

ঠিক আছে, -Wextraমানও হওয়া উচিত। -Werrorসতর্কতাগুলিকে ত্রুটিতে পরিণত করে (যা খুব বিরক্তিকর হতে পারে , বিশেষত আপনি যদি সংকলন না করেন -Wno-unused-result)। -pedanticআপনি std=c89যদি C99 টি বৈশিষ্ট্য ব্যবহার করেন তবে তার সাথে সম্মিলিতভাবে আপনাকে অতিরিক্ত সতর্কতা দেয়।

কিন্তু এটি সম্পর্কে। আপনি সি এর তুলনায় কোনও সি-কম্পাইলার টিউন করতে পারবেন না সি এর চেয়ে বেশি টাইপ-সেভ।


6

-M* বিকল্প পরিবার।

এগুলি আপনাকে এমন ফাইল তৈরি করতে দেয় যা স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে আপনার সি বা সি ++ উত্স ফাইলগুলির মধ্যে কোন শিরোনাম ফাইলগুলি নির্ভর করে। জিসিসি এই নির্ভরতার তথ্য দিয়ে ফাইলগুলি তৈরি করবে এবং তারপরে আপনি সেগুলি আপনার প্রাথমিক মেক ফাইল থেকে অন্তর্ভুক্ত করবেন।

এখানে-এমডি এবং-এমপি ব্যবহার করে অত্যন্ত জেনেরিক মেকফিলের একটি উদাহরণ রয়েছে যা সি ++ উত্স এবং শিরোনাম ফাইলগুলির দ্বারা পূর্ণ একটি ডিরেক্টরি সংকলন করবে এবং সমস্ত নির্ভরতা স্বয়ংক্রিয়ভাবে খুঁজে বের করবে:

CPPFLAGS += -MD -MP                                         
SRC = $(wildcard *.cpp)                                                       

my_executable: $(SRC:%.cpp=%.o)                                                        
        g++ $(LDFLAGS) -o $@ $^                                               

-include $(SRC:%.cpp=%.d)

এখানে একটি ব্লগ পোস্ট এখানে এটি আরও গভীরতার সাথে আলোচনা করেছে: http://www.microhowto.info/howto/automatic_generate_makefile_d dependferences.html


6

এটি রয়েছে -Werror, যা সমস্ত সতর্কতাগুলিকে ত্রুটি হিসাবে গণ্য করে এবং সংকলনটি থামায়। gccম্যানুয়েল পৃষ্ঠা আপনার কম্পাইলার জন্য প্রতি কমান্ড লাইন সুইচ ব্যাখ্যা করে।


@ ম্যাট জয়েনার: যেহেতু আপনি কোন মেশিন আর্কিটেকচারটি ব্যবহার করছেন তা উল্লেখ করেননি, তাই gccপতাকাগুলি আপনার এবং যে কোনও লিঙ্কের পরামর্শ দেওয়া উচিত তার মধ্যে আলাদা হতে পারে। এই কারণেই ম্যানুয়াল পৃষ্ঠাগুলি আপনার সফ্টওয়্যার দিয়ে সরবরাহ করা হয়।
গ্রেগ হিউগিল

4

-Wfloat-equal

থেকে: http://mces.blogspot.com/2005/07/char-const-argv.html

আমার পছন্দ হওয়া অন্য নতুন সতর্কতার মধ্যে একটি হ'ল -ফ্লোয়েট-সমান। এটি আপনাকে সতর্ক করে যে যখনই আপনার কাছে সমতার শর্তে একটি ভাসমান-পয়েন্ট নম্বর থাকবে। উজ্জ্বল! আপনি যদি প্রতিটি কম্পিউটার কম্পিউটার গ্রাফিক্স বা (আরও খারাপ :) গণ্য জ্যামিতি অ্যালগোরিদম প্রোগ্রাম করে থাকেন তবে আপনি জানেন যে কোনও দুটি ফ্লোট কখনও সমতার সাথে মেলে না ...


10
আমার ভাসে না সমতা সঙ্গে মেলে, যেমন আমি জানি আমি কি করছি।
রোল্যান্ড ইলিগ

4

আমি এই থ্রেডটি একটি নির্দিষ্ট সমস্যা সমাধানের জন্য পতাকাটির সন্ধান করতে পেয়েছি, আমি এটি এখানে দেখছি না তাই আমি এমন একটি যুক্ত করব যা আমার পোস্টে আমাকে স্টাম্পিং করছিল :

-Wformat=2পতাকা

-Wformat=> সরবরাহ করা আর্গুমেন্টগুলিতে নির্দিষ্ট করা ফর্ম্যাট স্ট্রিংয়ের জন্য উপযুক্ত কিছুর সুনির্দিষ্ট করে তা নিশ্চিত করতে কল করুন printfএবং scanfইত্যাদি Check

এবং এটি সম্পর্কে সত্যই গুরুত্বপূর্ণ অংশ ( জিসিসি ম্যানুয়াল অনুযায়ী ):

-Wformatঅন্তর্ভুক্ত করা হয় -Wall। চেক, বিকল্প বিন্যাস কিছু দিক উপর আরো বেশি নিয়ন্ত্রণ জন্য -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length, -Wformat-nonliteral, -Wformat-security, এবং -Wformat=2-Wall.` অন্তর্ভুক্ত নয় পাওয়া যায়, কিন্তু

সুতরাং, কেবল আপনার -Wallঅর্থ এই নয় যে আপনার কাছে এটি রয়েছে। ;)


3

আমি মাঝে মাঝে -sঅনেক ছোট এক্সিকিউটেবলের জন্য ব্যবহার করি :

-s
    Remove all symbol table and relocation information from the executable.

সূত্র: http://gcc.gnu.org/onlinesocs/gcc/Link-Options.html# লিঙ্ক-অংশ


6
আপনার কেবলমাত্র stripবাইনারি চালানো উচিত , এভাবে আপনি ডিবাগ তথ্য সহ বাইনারি রাখতে পারেন, এটি বিতরণের জন্য পরে সরিয়ে ফেলুন।
হস্তুরকুন

হ্যাঁ, stripখুব কাজ করে তবে -sদ্রুত এবং সহজ হতে পারে, যদিও এটি চলার মতো বিস্তৃত নয়strip
ভাসিলি শারাপভ

3

যদিও এই উত্তরটি সামান্য অফ-টপিক হতে পারে এবং প্রশ্নটি আমার কাছ থেকে উপযুক্ত +1

আমি কোনও অতিরিক্ত সতর্কতাগুলিতে বিশেষভাবে আগ্রহী, এবং / অথবা এবং কোনও ক্ষেত্রে দুর্ঘটনাজনিত ধরণের অমিলকে একেবারে হ্রাস করার জন্য সতর্কতাগুলিকে ত্রুটিতে পরিণত করি।
এমন একটি সরঞ্জাম রয়েছে যা সমস্ত ত্রুটিগুলি এবং সম্ভাব্য ত্রুটিগুলি স্পষ্টভাবে না ধরা উচিত , স্প্লিন্ট রয়েছে যা আইএমএইচও সেই বিষয়টির জন্য জিসিসি বা অন্য কোনও সংকলকের তুলনায় ত্রুটিগুলি খুঁজে বের করার পক্ষে আরও ভাল কাজ করে। এটি আপনার সরঞ্জাম-বুকে থাকার উপযুক্ত সরঞ্জাম।

স্প্লিন্টের মতো লিন্ট-টাইপের সরঞ্জামের মাধ্যমে স্থির চেক করা কোনও সংকলক সরঞ্জামচয়ের অংশ হওয়া উচিত।


এটি সর্বদা দেখায় যে কোনও ত্রুটি সিটিতে প্রিপ্রসেসর ফাইল ফাইল করতে পারে না: \ অন্তর্ভুক্ত করুন, আমি কী করব তা নিশ্চিত নই
সুরজ জৈন

2

আমি বিশেষত কোনও অতিরিক্ত সতর্কতার সাথে আগ্রহী,

ছাড়াও -Wall, -Wবা -Wextraবিকল্প ( -Wজিসিসি পুরোনো সংস্করণগুলি সেইসাথে নতুন বেশী সাথে কাজ করে; সাম্প্রতিককালের সংস্করণ বিকল্প নাম সমর্থন -Wextra, যা একই জিনিস মানে, কিন্তু বর্ণনামূলক হয়) বিভিন্ন অতিরিক্ত সতর্কবার্তা দেয়।

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

এবং / অথবা এবং কোনও ক্ষেত্রে দুর্ঘটনাজনিত ধরণের অমিলকে একেবারে হ্রাস করার জন্য সতর্কতাগুলিকে ত্রুটিতে পরিণত করে।

-Werrorসমস্ত সতর্কতাগুলিকে ত্রুটিতে পরিণত করে। আমি মনে করি না যদিও জিসিসি আপনাকে নির্দিষ্ট সতর্কতার জন্য বেছে বেছে এটি করতে দেয়।

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


4
"আমি মনে করি না, যদিও জিসিসি আপনাকে নির্দিষ্ট সতর্কতার জন্য বেছে বেছে এটি করতে দেয়।" আসলে, আপনি পারেন -Werror=some-warning
ম্যাথু ফ্ল্যাশেন

0
  • -Wmissing-prototypes: কোনও পূর্ববর্তী প্রোটোটাইপ ঘোষণা ছাড়াই যদি কোনও গ্লোবাল ফাংশন সংজ্ঞায়িত করা হয়।
  • -Wformat-security: সম্ভাব্য সুরক্ষা সমস্যার প্রতিনিধিত্ব করে এমন ফর্ম্যাট ফাংশনগুলির ব্যবহার সম্পর্কে সতর্ক করে। বর্তমানে, এটি কলগুলি printfএবং scanfফাংশন সম্পর্কে সতর্ক করে যেখানে ফর্ম্যাট স্ট্রিংটি স্ট্রিং আক্ষরিক নয় এবং কোনও বিন্যাসের আর্গুমেন্ট নেই

0
  • -Werror=return-type: ফাংশনটির যখন সিসিটিতে কোনও রিটার্ন না থাকে তখন ত্রুটি প্রয়োগ করে। এটি /we4716ভিজ্যুয়াল স্টুডিওতে রয়েছে।

  • -Werror=implicit-function-declaration: সংজ্ঞায়িত / অন্তর্ভুক্ত না করে ফাংশন ব্যবহার করা হলে ত্রুটি প্রয়োগ করুন। এটি /we4013ভিজ্যুয়াল স্টুডিওতে রয়েছে।

  • -Werror=incompatible-pointer-types: প্রত্যাশিত পয়েন্টার প্রকারের সাথে কোনও পয়েন্টারের প্রকারের মিল থাকলে ত্রুটি ঘটায়। এটি /we4133ভিজ্যুয়াল স্টুডিওতে রয়েছে।

প্রকৃতপক্ষে, আমি আমার সি কোড ক্রস প্ল্যাটফর্ম রাখতে চাই এবং আমি সিএমকে ব্যবহার করি এবং আমি প্রদত্ত সিএফ্ল্যাগগুলিকে সিএমকেলিস্ট.টেক্সটে রাখি:

if (CMAKE_SYSTEM_NAME MATCHES "Windows")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /we4013 /we4133 /we4716")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Darwin")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration -Werror=incompatible-pointer-types -Werror=return-type")
endif()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.