স্বয়ংক্রিয় সদৃশ-শিরোনাম বর্জন সহ একটি অসুবিধা হ'ল ফাইলের নাম কী অন্তর্ভুক্ত করে সে বিষয়ে সি স্ট্যান্ডার্ড তুলনামূলক নীরব। উদাহরণস্বরূপ, ধরুন যে সংকলন করা হচ্ছে মূল ফাইলটিতে নির্দেশনা রয়েছে #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যা সংকলকটিকে কেবল একবার সেই ফাইলটি অন্তর্ভুক্ত করতে বলে।