স্বয়ংক্রিয় সদৃশ-শিরোনাম বর্জন সহ একটি অসুবিধা হ'ল ফাইলের নাম কী অন্তর্ভুক্ত করে সে বিষয়ে সি স্ট্যান্ডার্ড তুলনামূলক নীরব। উদাহরণস্বরূপ, ধরুন যে সংকলন করা হচ্ছে মূল ফাইলটিতে নির্দেশনা রয়েছে #include "f1.h"
এবং #include "f2.h"
সেই নির্দেশাবলীর জন্য পাওয়া ফাইলগুলি উভয়ই রয়েছে #include "f3.h"
। যদি f1.h
এবং f2.h
বিভিন্ন ডিরেক্টরিতে থাকে তবে সন্ধানের মাধ্যমে খুঁজে পাওয়া যায় যেগুলি পাথগুলি অন্তর্ভুক্ত করে, তবে এটি অস্পষ্ট হবে যে #include
এই ফাইলগুলির মধ্যে নির্দেশাবলী একই f3.h
ফাইলটি বা ভিন্ন ভিন্ন লোড করার উদ্দেশ্যে ছিল ।
আপেক্ষিক পাথ সহ ফাইল অন্তর্ভুক্ত করার সম্ভাবনাগুলিতে যদি কেউ যোগ করে তবে বিষয়গুলি আরও খারাপ হয়। কিছু ক্ষেত্রে যেখানে হেডার ফাইলগুলি নেস্টেডের জন্য আপেক্ষিক পাথ ব্যবহার করে থাকে সেগুলির মধ্যে নির্দেশিকা অন্তর্ভুক্ত থাকে এবং যেখানে কেউ সরবরাহ করা শিরোনাম ফাইলগুলিতে কোনও পরিবর্তন এড়াতে চায় না সেখানে কোনও প্রকল্পের ডিরেক্টরি কাঠামোর মধ্যে একাধিক স্থানে নথির একটি হেডার ফাইল থাকা প্রয়োজন। যদিও এই শিরোলেখ ফাইলটির একাধিক দৈহিক অনুলিপি উপস্থিত রয়েছে, সেগুলি শব্দার্থভাবে বিবেচনা করা উচিত যেন তারা একক ফাইল।
যদি #pragma once
নির্দেশটি কোনও শনাক্তকারীকে অনুসরণ করার অনুমতি দেয় once
, শব্দার্থকগুলির সাথে যে সংকলকটি ফাইলটি এড়ানো উচিত যদি সনাক্তকারী পূর্বের মুখোমুখি #pragma once
নির্দেশিকার সাথে কোনওটির সাথে মেলে , তবে শব্দার্থবিজ্ঞানটি দ্ব্যর্থহীন হবে; একটি সংকলক যা বলতে পারে যে কোনও #include
নির্দেশিকা একই- #pragma once
ট্যাগড ফাইলটিকে আগের হিসাবে লোড করবে , এটি ফাইলটি আবার না খোলায় এড়িয়ে কিছুটা সময় সাশ্রয় করতে পারে, তবে এই ধরণের সনাক্তকরণটি শব্দার্থগতভাবে গুরুত্বপূর্ণ হবে না কারণ ফাইলটি এড়ানো যায় কিনা অথবা ফাইল নামটি ম্যাচ হিসাবে স্বীকৃত ছিল না। যাইহোক, কোনও কম্পাইলার সেভাবে কাজ করার বিষয়ে আমি অসচেতন। একটি সংকলক থাকার সাথে পর্যবেক্ষণ করুন যে কোনও ফাইল প্যাটার্নের সাথে মেলে কিনা #ifndef someIdentifier / #define someIdentifier / #endif [for that ifndef] / nothing following
এবং যদি এমনটির সাথে উপরের সমতুল্য আচরণ করে #pragma once someIdentifier
তবেsomeIdentifier
সংজ্ঞায়িত অবশেষ, মূলত হিসাবে ভাল।
#pragma once
যা সংকলকটিকে কেবল একবার সেই ফাইলটি অন্তর্ভুক্ত করতে বলে।