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 oncehem de için çoklu ekleme iyileştirmesini bozabilir.

Ayrıca bkz.

Pragma yönergeleri ve __pragma ve _Pragma anahtar sözcükleri