সি / সি ++ প্রিপ্রসেসরে তার নিজস্ব লাইনে একক পাউন্ড / হ্যাশ সাইন (#) এর উদ্দেশ্য কী?


145

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

(1) #ifndef BOOST_CONFIG_HPP
(2) #  include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) #  pragma once
(7) #endif

লাইন 4 এ, পাউন্ড চিহ্নের পরে কিছুই নেই। এর কী প্রভাব আছে? এটি সি প্রিপ্রসেসর (সিপিপি) নির্দিষ্টকরণে সংজ্ঞায়িত করা হয়?

বুস্ট যেহেতু ক্রস প্ল্যাটফর্মের লাইব্রেরি, তাই আমি ধরে নেব যে কোনও সিপিপি এটি সঠিকভাবে পার্স করতে পারে। কোড জুড়ে এলোমেলো পাউন্ড / হ্যাশ লক্ষণগুলির প্রভাব / পার্শ্ব-প্রতিক্রিয়াগুলি কী হবে?


6
@ জায়েবিস ডিম। জিসিসি স্যুটটিতে প্রিপ্রসেসর এক্সিকিউটেবলের নাম "সিপিপি" (যখন
সংকলকগুলি

3
সিপিপি মানে সি-প্লাস-প্লাস।
djeidot

6
না সম্পূর্ণরূপে. En.wikedia.org/wiki/C_preprocessor
P45 আসন্ন

7
@ djeidot "cpp" অস্পষ্ট। এই কারণেই সি-প্লাস-প্লাস উল্লেখ করার সময় লোকেরা "সি ++", বা "সিএক্সএক্স" (x 45 ডিগ্রি রূপান্তরিত দেখাচ্ছে) ব্যবহার করে।
মাইক অংসওয়ার্থ

12
@ ডিজিডোট নো, সিপিপি হ'ল সি-প্রিপ্রসেসর। এটি সি ++ এমনকি অস্তিত্বের আগেই ছিল।
লেয়ানড্রস

উত্তর:


185

একটি #নিজস্ব লাইনে একটি এর কোনও প্রভাব নেই। আমি ধরে নিলাম এটি নান্দনিক মানের জন্য ব্যবহৃত হচ্ছে।

সি স্ট্যান্ডার্ড বলেছেন:

6.10.7 নাল নির্দেশ

শব্দার্থবিদ্যা

ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা

# new-line

কোন প্রভাব আছে।

সি ++ স্ট্যান্ডার্ড একই জিনিস বলে:

16.7 নাল নির্দেশনা [সিপিপি.নুল]

ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা

# new-line

কোন প্রভাব আছে।


4
এটি এটি ব্যবহারের উদ্দেশ্য ব্যাখ্যা করে না, যদিও এর অস্তিত্বের জন্য যুক্তি দেয় না।
স্টেলার ওয়ার্টেক্স

8
"এর কী প্রভাব আছে? এটি কি সি প্রিপ্রোসেসর (সিপিপি) নির্দিষ্টকরণে সংজ্ঞায়িত করা হয়েছে? ... পুরো কোড জুড়ে এলোমেলো পাউন্ড / হ্যাশ লক্ষণগুলির প্রভাব / পার্শ্ব-প্রতিক্রিয়া কী হবে?" আমি কি উত্তর দিয়েছি। এর কোনও প্রভাব নেই, তবে লেখক এটি ব্যবহারের কারণ সম্পর্কে অনুমান করতে চাইনি want আমি এখন তাই করেছি।
জোনাথন ওয়েকেলি

আপনাকে সঠিক উত্তর দেওয়া হয়েছে যে এর অর্থ প্রাকপ্রসেসর কিছুই নয়; আমি অনুমান করতে চলেছি যে এটি অন্য কোনও প্রোগ্রামকে (যেমন কোনও আইডিই বা লিন্ট) লজিক্যাল ইউনিট হিসাবে একসাথে নির্দেশের ব্লক রাখতে সহায়তা করতে পারে। কিছু আইডিই প্রোগ্রামারদের ফাইলের লজিকাল কাঠামোর উপর নজর রাখতে সহায়তা করার জন্য পাঠ্যের ব্লকগুলি প্রসারিত বা ধসে দেয়।
স্পেন্সার

107

এটি উত্স কোডটি দেখতে সুন্দর দেখাচ্ছে, এগুলিই।

পুরো ব্লকটি একটি প্রিপ্রোসেসর বিভাগ এটি হাইলাইট করে।

এবং প্রকৃতপক্ষে, উভয় সি এবং সি ++ প্রিপ্রসেসরগুলি অবশ্যই# একটি লাইনে উপেক্ষা করতে হবে


16
এবং কিছু পাঠ্য সম্পাদক (যেমন, {বা }ভিমে) তে নেভিগেট করা আরও সহজ করে তোলে ।
wchargin

@ ডাব্লুচারগিন, এটি আপনি কীভাবে দেখেন তার উপর নির্ভর করে। আপনি যদি দুটি প্রিপ্রসেসর ব্লকগুলির মধ্যে নেভিগেট করতে চান তবে যুক্ত করা #আপনাকে ব্যবহার {বা বাধা দেবে }। প্রকৃতপক্ষে, }দুটি ব্লকের মাঝখানে লাফিয়ে উঠতে না পারার চেয়ে ব্লকের (ওপির উদাহরণে) উপরের দিকে ঝাঁপিয়ে পড়ার জন্য দুবার চাপ দেওয়া আরও সহজ হতে পারে ।
শাহবাজ

3
@ শাহবাজ অবশ্যই! আমার থাম্বের নিয়মটি হ'ল "যৌক্তিক ইউনিটগুলিকে একসাথে রাখুন", যাতে "অনুচ্ছেদ "টির সত্যিকার অর্থে" ধারণা "। আমি প্রিপ্রসেসর ঘোষণার সাথেও এই নিয়মটি অনুসরণ করব। অবশ্যই, এটি একটি বড় ডিগ্রি থেকে ব্যক্তিগত স্টাইলের বিষয়।
wchargin

46

সর্বদা অন্যান্য সংস্থানগুলির উপর নির্ভর করার পরিবর্তে কোনও অনুমোদনযোগ্য উত্স পরীক্ষা করুন। সি এর আইএসও 9899 :: 2011 হিসাবে মানিক করা হয়েছে, সি ++ এর একটি আইএসও স্ট্যান্ডার্ডও রয়েছে। উভয়ই স্বীকৃত এবং চূড়ান্ত খসড়াটি একটি সংক্ষিপ্ত অনুসন্ধানে উপলব্ধ। সি স্ট্যান্ডার্ডে 10.১০..7 (সি ++ তে অনেকগুলি একই পাঠ্য রয়েছে) রয়েছে:

ফর্মটির একটি পূর্বনির্ধারিত নির্দেশিকা

# new-line

কোন প্রভাব আছে।

এটি একটি নাল দিকনির্দেশনা , ;মূল-ভাষায় পূর্বের প্রকাশ ছাড়া যতটা হ'ল একটি a শূন্য বক্তব্য

প্রিপ্রোসেসরটির জন্য এটি কেবল বিন্যাস / পঠনযোগ্যতার জন্য হাইলাইট করা যে লাইনগুলি একত্রে একত্রিত belong (সেমিকোলন ওটিওএইচ শব্দার্থগতভাবে প্রাসঙ্গিক)।

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