এক্সকোডে সতর্কতা দমন করার কোনও উপায় আছে কি?


119

এক্সকোডে সতর্কতা দমন করার কোনও উপায় আছে কি?

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


হ্যাঁ, কখনও কখনও আপনাকে কোনও অব্যবহৃত পরিবর্তনশীল (তাঁর মতে) সম্পর্কে আপনাকে সতর্ক না করার জন্য সংকলক বলার দরকার BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
পড়েছিল

উত্তর:


145

প্রতি ফাইলের ভিত্তিতে সতর্কতাগুলি অক্ষম করতে, এক্সকোড 3 এবং llvm-gcc-4.2 ব্যবহার করে আপনি ব্যবহার করতে পারেন:

#pragma GCC diagnostic ignored "-Wwarning-flag"

যেখানে সতর্কতার নামটি কিছু জিসিসি সতর্কতা পতাকা।

এটি কমান্ড লাইনে কোনও সতর্কতা পতাকা ওভাররাইড করে। যদিও এটি সমস্ত সতর্কতার সাথে কাজ করে না। আপনার সিএফএলএজিএস-এ -fdiagnostics- শো-বিকল্পটি যোগ করুন এবং আপনি এই সতর্কতাটি অক্ষম করতে কোন পতাকা ব্যবহার করতে পারবেন তা দেখতে পাবেন।


ধন্যবাদ! ঠিক আমার কী দরকার!
মোসজি

28
সতর্কতা কোডটি পাওয়ার সহজ উপায়: লগ নেভিগেটরে যান (কমান্ড + 7), শীর্ষতম বিল্ডটি নির্বাচন করুন, লগটি প্রসারিত করুন (ডানদিকে '=' বোতামটি) এবং নীচে স্ক্রোল করুন।
নিল এয়ার্ড্ট

1
যারা যত্নশীল তাদের জন্য, জিসিসি সতর্কতা বিকল্পগুলির একটি শিক্ষামূলক রেফারেন্স: gcc.gnu.org/onlinesocs/gcc/Warning-Options.html
লেবি

2
এটি #pragma GCC diagnostic ignored "-Wwarning-flag"ইতিমধ্যে মুছে ফেলা হয়েছে বলে মনে হয়
অ্যালেনলিলি

1
@ অ্যালেনলিলি এটি এখনও সেখানে রয়েছে, আপনাকে কেবল gcc.gnu.org/onlinesocs/gcc/Warning-Options.htmlwarning-flag
ফোনিক্স

49

অব্যবহৃত ভেরিয়েবল সতর্কতা দমন করার সহজ উপায় রয়েছে :

#pragma unused(varname)

সম্পাদনা: উত্স: http://www.cocoadev.com/index.pl?XCodePragmas

আপডেট: আমি একটি নতুন সমাধান নিয়ে এসেছি, আরও শক্তিশালী

  1. প্রকল্পটি খুলুন> সক্রিয় লক্ষ্য সম্পাদনা করুন> বিল্ড ট্যাব।
  2. এর অধীনে User-Defined: কী (সন্ধান করুন (বা যদি আপনি একটি না পান তবে তৈরি করুন) কীটি GCC_WARN_UNUSED_VARIABLEসেট করুন : সেট করুন NO

সম্পাদনা -২ উদাহরণ:

BOOL ok = YES;
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

সংকলক এর জন্য অব্যবহৃত পরিবর্তনশীল সতর্কতা দেখায় ok

সমাধান:

BOOL ok = YES;
#pragma unused(ok)
NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

PS: আপনি অন্যান্য সতর্কতা সেট / রিসেট করতে পারেন GCC_WARN_ABOUT_RETURN_TYPE:YES/NO


31
এমনকি ভেরিয়েবল ঘোষণার আগে __ অপব্যবহার করা সহজতর।
মার্ক লিওনার্ড

@ চিহ্ন-লেওনার্ডের একটি পৃথক উত্তর হওয়া উচিত ছিল, আমি এটি বেশ কয়েকদিন ধরে খুঁজছিলাম। হতাশার বাইরে মন্তব্য পড়তে হয়েছিল আমাকে। ধন্যবাদ.
বিশ্রাম

35

জিসিসির জন্য আপনি ব্যবহার করতে পারেন

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow-ivar"
// your code
#pragma GCC diagnostic pop

আপনি এখানে জিসিসি প্রগমা সম্পর্কে জানতে এবং একটি সতর্কতার সতর্কতার কোডটি পেতে রিপোর্ট নেভিগেটরে যান (কমান্ড + 9), উপরের বিল্ডটি নির্বাচন করুন, লগটি ডানদিকে প্রসারিত করুন (ডানদিকে '=' বোতামটি) এবং এতে স্ক্রোল করুন নীচে এবং সেখানে আপনার সতর্কতা কোডটি বর্গাকার বন্ধনীগুলির মধ্যে রয়েছে is[-Wshadow-ivar]

ঝনঝন জন্য আপনি ব্যবহার করতে পারেন

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wshadow-ivar"
// your code
#pragma clang diagnostic pop

4
কলং বিদ্যমান উত্স কোডের সাথে সামঞ্জস্য করার জন্য জিসিসির প্রাগমা সমর্থন করে। সুতরাং আপনার কেবল জিসিসি ফর্ম্যাট প্রাগমা লিখতে হবে।
অ্যালেন

1
এক্সকোড 5.0 দিয়ে শুরু করা, ক্ল্যাং কেবল সরবরাহকারীর সরবরাহকারী। সুতরাং আপনি এখন ঝাঁকুনি বিন্যাসটি ব্যবহার করতে পারেন to
অ্যালেনলিলি

27

একটি পৃথক ফাইলের জন্য একটি সতর্কতা ছাড়িয়ে যাওয়ার জন্য নিম্নলিখিতটি করুন:

এক্সকোড প্রকল্পে ফাইলটি নির্বাচন করুন। সতর্কতা প্রত্যাখ্যান করার জন্য বিল্ড বিকল্পগুলির সাথে পৃষ্ঠায় যান তথ্যটি প্রবেশ করুন টিপুন noনা-

-Wno-

যেমন

-Wno-অব্যবহৃত-প্যারামিটার

আপনি যদি বিল্ড ট্যাব পৃষ্ঠার নীচের অংশে অবস্থিত জিসিসি সতর্কতাগুলিতে প্রজেক্টের সেটিংসের দিকে নজর দেন তবে আপনি সতর্কতার নামটি পেতে পারেন, প্রতিটি সতর্কতার উপর ক্লিক করে এটি আপনাকে সতর্কতা প্যারামিটারের নামটি বলবে:

যেমন

যখনই কোনও ফাংশন প্যারামিটারটি তার ঘোষণা থেকে দূরে অবধি ব্যবহৃত হয় তখন সতর্ক করুন। [জিসিসি_ওয়ার্ন_ইউনএসইউডিপিপিআরএমেটার, -অযুক্ত-পরামিতি]


2
আপনি যখন কোনও কোডবেস থেকে কোড অন্তর্ভুক্ত করেছেন তখন এটি সংশোধন করতে চান না যা সংকলক সতর্কবার্তাগুলি ট্রিগার করতে ঘটবে ... এর জন্য এটি একটি দুর্দান্ত সমাধান ...
মার্ক বিটন

দুর্দান্ত উপায় হিসাবে দেখে মনে হচ্ছে তবে আপনি কীভাবে কোনও কোড পাবেন এটি
এক্সকোড

2
পাওয়া আমার এখানে উপর XCode 4 সমাধান stackoverflow.com/questions/6057192/...
Santthosh

আমার মতো যদি কেবলমাত্র একটি সমস্যার জন্য যদি আপনার সুপারিশ সতর্কতা প্রয়োজন হয়: ...m:45:69: Incompatible pointer types sending...আমি বিল্ড ব্যাখ্যাটি খুলেছি এবং এই সতর্কতাটি খুঁজে পেয়েছি : [-Wincompatible-pointer-types]আমি কেবল এটির নামকরণ করেছি -Wno-incompatible-pointer-typesএবং আমার .mফাইলে একটি পতাকা হিসাবে যুক্ত করেছি ... আরও সতর্কতা বুম করবেন না ... +10 যদি আমি পারলাম
নিকোস করালিস

5

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

আপনার কোডে প্রতিটি ধরণের সতর্কতা জিনিসগুলি সঠিকভাবে করা (সাধারণত সঠিকভাবে বস্তুগুলিকে কাস্ট করে) বা প্রোটোটাইপগুলি যখন আপনার প্রয়োজন হয় তা ঘোষণা করে এড়ানো যায়।


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

5

সতর্কতা থেকে মুক্তি পেতে: প্রশ্নযুক্ত বস্তুর জন্য একটি বিভাগ ইন্টারফেস তৈরি করার চেষ্টা করুন

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

সরাইয়া হিসাবে, আমি শিপিং কোডে অননুমোদিত পদ্ধতিগুলি কল করার বিরুদ্ধে দৃ strongly ়ভাবে পরামর্শ দিচ্ছি । ইন্টারফেস বদল করতে পারে এবং হয়ে যাবে এবং এটি আপনার দোষ হবে।


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

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


3

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

আমি এই পদ্ধতিটি '(অবহেলিত)' বিভাগের সাথে 'অবহিত।' তে অবহেলা ফাংশনগুলির জন্যও ব্যবহার করি।

সর্বোত্তম অংশটি হ'ল আপনি পৃথক প্রোটোটাইপগুলিকে মন্তব্য করে বা সংশোধিত করে পৃথক সতর্কতাগুলি বেছে বেছে সক্ষম / অক্ষম করতে পারেন।


1

এই নির্দিষ্ট সতর্কতা দমন করা নিরাপদ নয়। সংকলকটির পক্ষে যুক্তিগুলির ধরণগুলি জানতে হবে এবং সঠিক কোড উত্পন্ন করতে কোনও পদ্ধতিতে ফিরে আসে।

উদাহরণস্বরূপ, আপনি যদি কোনও পদ্ধতিতে কল করছেন

[foo doSomethingWithFloat: 1.0];

এটি একটি ফ্লোট নেয় এবং কোনও প্রোটোটাইপ দৃশ্যমান হয় না, তারপরে সংকলক অনুমান করবে যে পদ্ধতিটি একটি ফ্লোট নয়, একটি ডাবল গ্রহণ করে। এটি ক্রাশ এবং ভুলভাবে ব্যাখ্যা করা মানগুলির কারণ হতে পারে। উপরের উদাহরণে, ইন্টেল মেশিনগুলির মতো সামান্য এন্ডিয়ান মেশিনে, রিসিভার পদ্ধতিটি 1 টি নয়, 0 টি পাস দেখতে পাবে।

I386 এবিআই ডক্সে আপনি কেন পড়তে পারেন বা আপনার সতর্কতাগুলি ঠিক করতে পারেন। :-)


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