Bir kez #pragma C 11 standart bir parçası mı?
Geleneksel olarak, standart ve taşınabilir C birden fazla başlık kusurları önlemenin yolu/#ifndef - #define - #endif
Ön-derleyici direktifleri de macro-guard scheme (bkz: kod parçacığını aşağıda) denilen düzeni kullanmak için.
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Çoğu uygulamaları/Derleyiciler (aşağıdaki resme bakın) ancak, yok bir daha "zarif" makro-gardiyan düzeni #pragma once
adlı aynı amaca hizmet eden alternatif. #pragma once
makro-gardiyan düzeni, daha az kod adı çatışmalarda kaçınma ve bazen geliştirilmiş derleme hızı da dahil olmak üzere ile karşılaştırıldığında pek çok avantajı vardır.
Biraz araştırma yapmak, #pragma once
Yönerge neredeyse bilinen tüm Derleyiciler tarafından desteklenen olmasına rağmen, #pragma once
Yönerge C 11 standardının bir parçası olup olmadığı konusunda bir turbidness olduğunu fark ettim.
Soru:
- Birisi
#pragma once
Yönerge C 11 standart veya bir parçası olup olmadığını açıklayabilirsin? - Eğer C 11 standart bir parçası değilse, daha sonra serbest bırakır (örneğin, C 14 veya üstü) de dahil olmak üzere herhangi bir planları var mı?
- Ayrıca, eğer birisi daha fazla tekniklerinden birini kullanarak dezavantajları (yani, makro-koruma karşı
#pragma once
)/avantajları hakkında ayrıntılı olsaydı güzel olurdu.
CEVAP
#pragma once
değilstandart. Bir yaygındır (ama
kullanılan evrensel) uzantısı
- eğer taşınabilirlik endişelerinizi sınırlıdır, ve
- dosyaları dahil tüm her zaman yerel bir disk üzerinde olduğundan emin olabilirsiniz.
Standardizasyon için kabul edildi, ama nedeniyle reddedildi güvenilir bir şekilde uygulanamıyor. (Bu sorun oluşur dosyaları birkaç farklı uzaktan bağlar ile erişilebilir.)
Oldukça kolay görevlisi vardır vardır emin olun. tek bir gelişme içinde çatışmalar. Kütüphaneler için, hangi olabilir çok farklı gelişmeler tarafından kullanılması, bariz bir çözümdür bekçi bürosu için rastgele bir sürü oluşturmak için oluşturduğunuzda. (İyi bir editör bunu yapmak için ayarlanabilir yeni bir başlık açtığınızda size.) Ama bu bile olmadan, Henüz arasındaki çatışmalar herhangi bir sorunla karşılaşmadan kurdum kitaplıkları.
Neden Standart tarayıcı sanal makine d...
C standart C 14 değerleri belirsiz ve ...
C Standart Kütüphane sarıcı işlevleri ...
Python paketinin bir parçası olan tüm ...
Dosya adı? Yol adı? Adı baz? Adlandırm...