ปัญหาอย่างหนึ่งของการยกเว้นส่วนหัวที่ซ้ำกันโดยอัตโนมัติคือมาตรฐาน C ค่อนข้างเงียบในเรื่องของความหมายของชื่อไฟล์ ตัวอย่างเช่นสมมติว่าไฟล์หลักถูกรวบรวมมีคำสั่ง#include "f1.h"และและพบไฟล์สำหรับคำสั่งเหล่านั้นทั้งสองมี#include "f2.h" #include "f3.h"หากf1.hและf2.hอยู่ในไดเรกทอรีที่แตกต่างกัน แต่ถูกค้นพบโดยการค้นหารวมถึงเส้นทางมันจะไม่ชัดเจนว่า#includeคำสั่งภายในไฟล์เหล่านั้นตั้งใจจะโหลดf3.hไฟล์เดียวกันหรือไฟล์อื่น
สิ่งต่าง ๆ แย่ลงไปอีกถ้ามีใครเพิ่มความเป็นไปได้ของไฟล์รวมถึงเส้นทางที่เกี่ยวข้อง ในบางกรณีที่ไฟล์ส่วนหัวใช้พา ธ สัมพัทธ์สำหรับคำสั่งซ้อนรวมถึงคำสั่งและหากใครต้องการหลีกเลี่ยงการเปลี่ยนแปลงใด ๆ กับไฟล์ส่วนหัวที่ให้มาอาจจำเป็นต้องมีไฟล์ส่วนหัวซ้ำในหลาย ๆ ที่ภายในโครงสร้างไดเรกทอรีของโครงการ แม้ว่าจะมีอยู่จริงหลายสำเนาของไฟล์ส่วนหัวที่มีอยู่พวกเขาควรจะถือความหมายราวกับว่าพวกเขาเป็นไฟล์เดียว
หาก#pragma onceคำสั่งอนุญาตให้ตัวระบุติดตามตามonceความหมายที่คอมไพเลอร์ควรข้ามไฟล์หากตัวระบุตรงกับตัวหนึ่งจาก#pragma onceคำสั่งที่พบก่อนหน้านี้ความหมายจะไม่มีความชัดเจน คอมไพเลอร์ซึ่งสามารถบอกได้ว่า#includeคำสั่งจะโหลด#pragma onceไฟล์ -tagged เดียวกันกับไฟล์ก่อนหน้ามันสามารถประหยัดเวลาได้เล็กน้อยโดยการข้ามไฟล์โดยไม่เปิดอีกครั้ง แต่การตรวจจับดังกล่าวจะไม่สำคัญทางอรรถศาสตร์เนื่องจากไฟล์นั้นจะถูกข้ามหรือไม่ หรือไม่ใช่ชื่อไฟล์ที่ได้รับการยอมรับว่าเป็นการจับคู่ อย่างไรก็ตามฉันไม่ทราบว่าคอมไพเลอร์ตัวใดทำงานในลักษณะนั้น มีคอมไพเลอร์สังเกตว่าไฟล์ตรงกับรูปแบบ#ifndef someIdentifier / #define someIdentifier / #endif [for that ifndef] / nothing followingและการรักษาสิ่งนั้นเทียบเท่ากับข้างต้น#pragma once someIdentifierถ้าsomeIdentifier ยังคงกำหนดเป็นหลักดี
#pragma onceใดให้คอมไพเลอร์รวมไฟล์นั้นเพียงครั้งเดียว