SORU
9 AĞUSTOS 2012, PERŞEMBE


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
9 AĞUSTOS 2012, PERŞEMBE


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ık name.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) ad std içinde.Bu isimler ilk genel ad kapsamında ilan edilir belirtilmemiş ve daha sonra açık tarafından ad std 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 AD std 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009
  • Tom Megalis

    Tom Megalis

    18 NİSAN 2006