Salah satu kesulitan dengan pengecualian duplikat-header otomatis adalah bahwa standar C relatif diam pada subjek apa yang termasuk nama file. Sebagai contoh, misalkan file utama yang dikompilasi berisi arahan #include "f1.h"dan #include "f2.h", dan file yang ditemukan untuk arahan keduanya mengandung #include "f3.h". Jika f1.hdan f2.hberada di direktori yang berbeda, tetapi ditemukan dengan mencari path termasuk, maka akan menjadi tidak jelas #includearahan dalam file tersebut dimaksudkan untuk memuat f3.hfile yang sama , atau yang berbeda.
Hal-hal menjadi lebih buruk jika seseorang menambahkan kemungkinan menyertakan file termasuk jalur relatif. Dalam beberapa kasus di mana file header menggunakan jalur relatif untuk arahan termasuk bersarang, dan di mana orang ingin menghindari membuat perubahan pada file header yang disediakan, mungkin perlu memiliki file header yang digandakan di beberapa tempat dalam struktur direktori proyek. Meskipun ada beberapa salinan fisik dari file header itu, mereka harus dianggap semantik seolah-olah mereka adalah file tunggal.
Jika #pragma oncedirektif memungkinkan pengidentifikasi untuk mengikuti once, dengan semantik bahwa kompiler harus melewatkan file jika pengidentifikasi cocok dengan satu dari #pragma oncedirektif yang ditemui sebelumnya , maka semantik akan jelas; sebuah kompiler yang dapat memberi tahu bahwa suatu #includearahan akan memuat #pragma oncefile bertanda sama dengan yang sebelumnya, itu dapat menghemat sedikit waktu dengan melewatkan file tanpa membukanya lagi, tetapi deteksi tersebut tidak secara semantik penting karena file akan dilewati apakah atau tidak nama file dikenali sebagai kecocokan. Saya tidak mengetahui adanya kompiler yang bekerja seperti itu. Memiliki kompiler mengamati apakah file cocok dengan pola #ifndef someIdentifier / #define someIdentifier / #endif [for that ifndef] / nothing followingdan memperlakukan hal seperti itu setara dengan #pragma once someIdentifierjika di atassomeIdentifier tetap didefinisikan, pada dasarnya sama baiknya.
#pragma onceyang memberitahu kompiler untuk hanya memasukkan file itu sekali.