Neden std ad günlüğüm?
Aşağıdaki kod I log
önemsiz bir işlev tanımlayın. main
çalışıyorumdeğilonu aramak için; std::log
diyorum. Bununla birlikte, log
kendim denir; ve "log" ekranında. görüyorum! Nedenini bilen var mı? Ve çınlama 3.2 G 4.7 kullanıyorum.
#include <iostream>
#include <cmath>
double log(const double x) { std::cout << "log!\n"; return x; }
int main(int argc, char *argv[])
{
std::log(3.14);
return 0;
}
CEVAP
C Standart 17.6.1.2 Madde 4 (vurgu benim):
Hariç olarak açıklanan Hükümler 18 ile 30 ve Ek D, içeriğini her başlık
cname
olacaktır aynı ilgili başlıkname.h
olarak belirtilen C Standart Kütüphanesi (1.2) veya C Unicode TR, uygun, sanki eklenmesi. C standart kütüphanesinde, ancak bildirimleri (C makroları olarak tanımlanan adları hariç) ad kapsamı (3.3.6) adstd
içinde.Bu isimler ilk genel ad kapsamında ilan edilir belirtilmemiş ve daha sonra açık tarafından adstd
içine enjekte edilirkullanarak bildirimleri(7.3.3).
g aynı başlık dosyaları C ve C için yeniden kullanılabilir böylece onu ikinci bir yolu yok . G ve genel ad double log(double)
ilan tanımlamak için izin verilir.
Bölüm 17.6.4.3.3 3 ve 4 paragraflar:
Standart C kütüphanesi dış bağlantı ile bildirilen her isim
extern "C"
bağlantı ile bir isim, hem genel AD ADstd
olarak kullanmak için uygulama için ayrılmıştır.Her işlev imza Standart C kitaplığı ilan ile dış bağlantı olduğunu ayrılmış uygulaması olarak kullanmak için bir fonksiyon imza ile hem
extern "C"
extern "C "
bağlantı veya ad olarak bir ad kapsamı genel ad.
Ve Bölüm 17.6.4.3 üstündeki paragraf 2:
Eğer bir program veya açıkça bu madde tarafından izin verilen diğer sınırlı olduğu bir bağlamda bir isim bildirirse tanımlar, davranışı tanımsızdır.
Sen, diğer taraftan, olabilirdeğilya da herhangi bir şekilde ::log
ilan tanımlayın.
G araç zinciri size herhangi bir hata mesajı vermiyor çok kötü oldu.
Neden sıralanmamış bir dizi daha hızlı...
Neden bu iki kez (1927) garip bir sonu...
Neden HTML düşün” renk? “chucknorris m...
Neden Google while(1); JSON yanıtların...
Neden char[] şifreler için Dize Java t...