C ++ 98'deki asıl amaç <cstdint>
, küresel ad alanını kirletmekten kaçınmak için C ++ 'da kullanmanız gerektiğiydi ( <cstdint>
özellikle değil , bu yalnızca C ++ 11'e eklenmiştir, ancak <c*>
genel olarak başlıklar).
Bununla birlikte, uygulamalar yine de sembolleri global ad alanına koymaya devam etti ve C ++ 11 bu uygulamayı onayladı [*]. Yani, temelde üç seçeneğiniz var:
- Kullandığınız
<cstdint>
her bir tamsayı türünü kullanın ve tam olarak nitelendirin ya da using std::int32_t;
etc ile kapsama getirin (ayrıntı çünkü sinir bozucu, ancak C ++ standart kitaplığındaki diğer herhangi bir sembol için olduğu gibi bunu yapmanın doğru yolu)
- Kullanım
<stdint.h>
(kullanımdan kaldırıldığı için biraz kötü)
- Kullanın
<cstdint>
ve uygulamanızın sembolleri genel ad alanına koyacağını varsayın (çok kötü çünkü garanti edilmez).
Uygulamada, can sıkıcı büyük miktarda kodun son seçeneği kullandığından şüpheleniyorum, çünkü <cstdint>
sembolleri küresel ad alanına koyan bir uygulamada tesadüfen yapılması kolaydır . İlkini kullanmayı denemelisin. İkincisinin bir erdemi vardır, sadece bunu yapmak yerine global isim alanına bir şeyler koymanın garantilidir . Bunun özellikle yararlı olduğunu sanmıyorum, ancak önceliğiniz buysa, biraz yazmayı kurtarabilir.
Dördüncü bir seçenek var, #include <cstdint>
ardından using namespace std;
bazen yararlı olan, ancak koymamanız gereken yerler var using namespace std;
. Bu yerlerin olduğu yerde farklı insanların farklı fikirleri olacaktır, ancak "bir başlık dosyasında en üst düzeyde", "sınırlı bir kapsamda" dan daha kötü olan "bir cpp dosyasında en üst düzeyde" den daha kötüdür. Bazı insanlar asla yazmaz using namespace std;
.
[*] Bu, C ++ standart başlıklarının genel ad alanına bir şeyler koymasına izin verildiği ancak zorunlu olmadığı anlamına gelir. Yani bu sembollerle çarpışmaktan kaçınmalısınız, ancak onları gerçekten kullanamazsınız çünkü orada olmayabilirler. Temel olarak, C ++ 'daki global ad alanı bir mayın tarlasıdır, bundan kaçınmaya çalışın. Komitenin bir uygulamayı using namespace std;
bir başlık dosyasında en üst seviyeye yapıştırmak kadar neredeyse zararlı uygulamalarla onayladığı iddia edilebilir - fark, uygulamaların bunu yalnızca C standart kütüphanesindeki semboller için yapması, oysa using namespace std;
C ++ için yapmasıdır. -sadece semboller. C standardında, standarda ileride yapılacak eklemeler için ayrılmış isimleri listeleyen bir bölüm vardır. Bu adları C ++ global ad alanında da ayrılmış olarak ele almak tamamen aptalca bir fikir değil, ancak gerekli değil.
<cstdint>
. İşte aldığım hata var:./misc.h:7:10: fatal error: 'cstdint' file not found
.