সি প্রিপ্রসেসর থেকে কোনও বার্তা প্রিন্ট করার কোনও পোর্টেবল উপায় আছে কি?


উত্তর:


120

warningনির্দেশ সম্ভবত নিকটতম আপনি পাবেন, কিন্তু এটি সম্পূর্ণরূপে প্ল্যাটফর্ম-স্বাধীন নয়:

#warning "C Preprocessor got here!"

এএফআইএকি এটি এমএসভিসি ব্যতীত বেশিরভাগ সংকলকগুলিতে কাজ করে, যার ভিত্তিতে আপনাকে একটি pragmaনির্দেশিকা ব্যবহার করতে হবে :

#pragma message ( "C Preprocessor got here!" )

5
যা প্রশ্নটি করে, আপনি কি কোনওভাবে "প্রগমা বার্তা" এবং "সতর্কবাণী" অদলবদল করার জন্য সংকলন পতাকার উপর ভিত্তি করে একটি নির্দেশিকা রাখতে পারেন? উদাহরণস্বরূপ, এর মতো কিছু: #ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"... আমাকে চেষ্টা করে দেখতে হবে তবে প্রবৃত্তি আমাকে উত্তরটি বলে, এটি হ'ল না।
ব্রায়ান

11
@ ব্রায়ান: হ্যাঁ #define WARNING(msg) _Pragma("message " #msg)
ম্যাট জয়েনার

4
#pragma বার্তা () gcc এর পুরানো সংস্করণগুলি দ্বারা সমর্থিত নয় (যেমন gcc 4.1.2, RHEL5 এ ডিফল্ট সংস্করণ)। আমি এখনও এই পুরানো সংস্করণগুলির জন্য একটি উপযুক্ত সমতুল্য খুঁজে পেতে পারি - # সতর্কতা আমাদের পক্ষে সাধারণত ত্রুটি হিসাবে বিবেচিত হয় এবং সংকলন বন্ধ না করে আমরা বার্তাটি তথ্যবহুল হতে চাই #
ড্যানি এস

6
আপনার প্রকল্পটি যখন ডিফল্টরূপে সংযুক্ত হয় তখন একটি সতর্কতা জারি করা খুব অসুবিধে হয়। # প্রাগমা বার্তায় এই সমস্যা নেই।
রেনান জেমিগানি

56

নিম্নলিখিতগুলি এমএসভিসি এবং জিসিসি দ্বারা সমর্থিত ।

#pragma message("stuff")
#pragma message "stuff"

ঝনঝন সম্প্রতি সমর্থন যোগ শুরু হয়েছে দেখুন এখানে আরো অনেক কিছুর জন্য।


4
কেবল রেকর্ডের জন্য, সোলারিস স্টুডিও 12.3 (সান সি 5.12) এই প্রগমা সমর্থন করে না।
ম্যাক্সচলেপজিগ

ভিজুয়াল স্টুডিও vMicro ব্যবহার করে আরডুইনো 1.8 এর সাথে কাজ করে। ধন্যবাদ!
save_jeff


9

বেশিরভাগ সি সংকলক একটি #warningনির্দেশকে স্বীকৃতি দেবেন , তাই

 #warning "Got here"

মানক '# এরর' নির্দেশিকাটিও রয়েছে,

 #error "Got here"

সমস্ত সংকলক এটি সমর্থন করলেও এটি সংকলন / প্রাকপ্রসেসিং বন্ধ করে দেবে।


6
#pragma message("foo")

দুর্দান্ত কাজ করে আপনি-ওয়ারার ব্যবহার করেও সংকলন থামিয়ে দেবেন না


0

আর একটি সমাধান হ'ল মন্তব্যগুলি এবং তাদের প্রক্রিয়া করার জন্য একটি শেল স্ক্রিপ্ট ব্যবহার করা। এটি কিছু শৃঙ্খলা নেয় (বা শেল স্ক্রিপ্ট যা টাইপস ক্যাচ করে)।

উদাহরণস্বরূপ, আমি মন্তব্যগুলি ফর্ম্যাট করে //TODOএবং তারপরে একটি শেল স্ক্রিপ্ট যুক্ত করি যা তাদের সমস্তকে একটি প্রতিবেদনে সংগ্রহ করে।

আরও জটিল ব্যবহারের ক্ষেত্রে আপনি নিজের সাধারণ প্রিপ্রোসেসরটি লেখার চেষ্টা করতে পারেন। উদাহরণস্বরূপ, আপনি *.c2ফাইলগুলি হিসাবে আপনার উত্সগুলি সম্পাদনা করতে পারেন । সাধারণ প্রিপ্রোসেসর উত্সটি পড়বে, অনুসন্ধান করবে //TODOএবং printf("TODO ...")আউটপুট *.cফাইলে লিখবে ।


-17

আপনি পারবেন না। প্রিপ্রসেসরগুলি সি কোডের আগে প্রক্রিয়া করা হয়। স্ক্রিনে মুদ্রণের জন্য কোনও প্রিপ্রোসেসর নির্দেশ নেই, কারণ প্রিপ্রসেসর কোড কার্যকর করা হয় নি, এটি সি কোড তৈরি করতে ব্যবহৃত হয় যা এক্সিকিউটেবল কোডে সংকলিত হবে।

এর সাথে যে কোনও সমস্যা:

#ifdef ...
printf("Hello");
#endif

কারণ প্রিপ্রোসেসরগুলি যতদূর যেতে পারে আপনি এটি করতে পারেন।


5
এটি সংকলন-সময় মুদ্রণ করবে না, যা আমি ভাবছি যে ওপি খুঁজছেন।
বব কাউফম্যান

আমি ধরে নিয়েছিলাম তিনি রান-টাইমে মুদ্রণ বলতে চাইছেন।
আলেকজান্ডার রাফের্টি

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