once
pragma
Derleyicinin bir kaynak kod dosyası derlenirken yalnızca bir kez üst bilgi dosyasını içerdiğini belirtir.
Sözdizimi
#pragma once
Açıklamalar
derleyicisi dosyayı çeviri ünitesindeki ilk #include
dosyadan sonra tekrar açmayacağından ve okumayacağından, uygulamasının kullanımı #pragma once
derleme sürelerini azaltabilir. Buna çoklu ekleme iyileştirmesi denir. Dosyanın içeriğinin birden çok eklenmesini önlemek için önişlemci makro tanımlarını kullanan include guard deyimine benzer bir etkiye sahiptir. Ayrıca tek bir tanım kuralının ihlal edilmesini önlemeye yardımcı olur: tüm şablonların, türlerin, işlevlerin ve nesnelerin kodunuzda birden fazla tanım olmaması gereksinimi.
Örneğin:
// header.h
#pragma once
// Code placed here is included only once per translation unit
Genel ad alanını ön işlemci simgesiyle kirletmediğinden yeni kod için yönergesini öneririz #pragma once
. Daha az yazma gerektirir, daha az dikkat dağıtıcıdır ve sembol çakışmalarına neden olamaz. Farklı üst bilgi dosyaları koruma değeriyle aynı önişlemci simgesini kullandığında oluşan sembol çakışmaları hatalardır. C++ Standard'ın bir parçası değildir, ancak birkaç yaygın derleyici tarafından taşınabilir bir şekilde uygulanır.
Hem include guard deyiminin #pragma once
hem de aynı dosyada kullanılmasının bir avantajı yoktur. Derleyici include guard deyimini tanır ve deyimin standart formundan önce veya sonra yorum dışı kod veya önişlemci yönergesi gelmezse yönergeyle aynı şekilde #pragma once
çoklu ekleme iyileştirmesini uygular:
// header.h
// Demonstration of the #include guard idiom.
// Note that the defined symbol can be arbitrary.
#ifndef HEADER_H_ // equivalently, #if !defined HEADER_H_
#define HEADER_H_
// Code placed here is included only once per translation unit
#endif // HEADER_H_
Kodun yönergeyi uygulamayan #pragma once
derleyicilere taşınabilir olması gerektiğinde, mevcut kodla tutarlılığı korumak için veya çoklu ekleme iyileştirmesi imkansız olduğunda include guard deyimini öneririz. Dosya sistemi diğer adı veya diğer ad ekleme yolları derleyicinin kurallı yola göre aynı ekleme dosyalarını tanımlamasını engellediğinde karmaşık projelerde oluşabilir.
Etkilerini denetlemek için ön işlemci sembolleri kullanan, birden çok kez dahil edilecek şekilde tasarlanmış üst bilgi dosyalarında koruma deyimini kullanmamaya #pragma once
veya dahil etmemeye dikkat edin. Bu tasarım örneği için assert.h> üst bilgi dosyasına bakın<. Ayrıca dahil edilen dosyalar için birden çok yol oluşturmaktan kaçınmak için ekleme yollarınızı yönetmeye dikkat edin; bu da hem korumalar #pragma once
hem de için çoklu ekleme iyileştirmesini bozabilir.
Ayrıca bkz.
Pragma yönergeleri ve __pragma
ve _Pragma
anahtar sözcükleri