এটি কোডিং স্ট্যান্ডার্ডের "করণীয়" পরিবর্তে "উচিত" এর মধ্যে একটি। কারণটি হ'ল এটি প্রয়োগের জন্য আপনাকে অনেকগুলি সি ++ পার্সার লিখতে হবে।
হেডার ফাইলগুলির জন্য খুব সাধারণ নিয়ম হ'ল এগুলি তাদের নিজেরাই দাঁড়াতে হবে। শিরোনামের ফাইলটিতে অবশ্যই শিরোনামটি অন্তর্ভুক্ত করার আগে কিছু অন্যান্য শিরোলেখ ফাইল অন্তর্ভুক্ত করা উচিত নয়। এটি একটি পরীক্ষামূলক প্রয়োজন। কিছু এলোমেলো শিরোনাম দেওয়া foo.hh
, নিম্নলিখিতগুলি সংকলন এবং চালানো উচিত:
#include "foo.hh"
int main () {
return 0;
}
কিছু শিরোনামে অন্যান্য শ্রেণি ব্যবহারের ক্ষেত্রে এই নিয়মের ফলাফল রয়েছে। কখনও কখনও এই অন্যান্য ক্লাস ঘোষণা করে এই পরিণতিগুলি এড়ানো যায়। প্রচুর স্ট্যান্ডার্ড গ্রন্থাগার ক্লাসের মাধ্যমে এটি সম্ভব নয়। কোনও টেম্পলেট ইনস্ট্যান্টেশন যেমন std::string
বা হিসাবে ঘোষণা করার কোনও উপায় নেই std::vector<SomeType>
। #include
শিরোনামে a এসটিএল শিরোনামগুলি আপনার কাছে থাকতে হবে এমনকি যদি টাইপের একমাত্র ব্যবহার কোনও ফাংশনের যুক্তি হিসাবে থাকে।
আপনি যে ঘটনাক্রমে টানছেন সেগুলি নিয়ে আর একটি সমস্যা Example উদাহরণ: নিম্নলিখিতগুলি বিবেচনা করুন:
ফাইল foo.cc:
#include "foo.hh"
#include "bar.hh"
void Foo::Foo () : bar() { /* body elided */ }
void Foo::do_something (int item) {
...
bar.add_item (item);
...
}
এখানে টাইপ bar
করা একটি শ্রেণীর Foo
ডেটা সদস্য Bar
। আপনি এখানে সঠিক জিনিসটি করেছেন এবং # বার বার অন্তর্ভুক্ত করেছেন যদিও এটি ক্লাস সংজ্ঞায়িত করে শিরোলেখটিতে অন্তর্ভুক্ত থাকতে হবে Foo
। যাইহোক, আপনি দ্বারা ব্যবহৃত কাপড় অন্তর্ভুক্ত না Bar::Bar()
এবং Bar::add_item(int)
। এমন অনেকগুলি ক্ষেত্রে রয়েছে যেখানে এই কলগুলির অতিরিক্ত বাহ্যিক রেফারেন্স হতে পারে।
আপনি যদি foo.o
কোনও সরঞ্জাম যেমন বিশ্লেষণ করেন তবে nm
এটি উপস্থিত হবে যে ফাংশনগুলি foo.cc
সমস্ত ধরণের স্টাফকে কল করছে যার জন্য আপনি উপযুক্ত কাজ করেন নি #include
। সুতরাং আপনি কি #include
এই ঘটনাগুলি বহিরাগত রেফারেন্সের জন্য নির্দেশাবলী যুক্ত করা উচিত foo.cc
? উত্তর একেবারে না। সমস্যাটি হ'ল সরাসরি বলা হয় এমন কর্মগুলির থেকে ঘটনাক্রমে ডাকা ফাংশনগুলির মধ্যে পার্থক্য করা খুব কঠিন।