SORU
11 EYLÜL 2009, Cuma


Tanımı ve beyan arasındaki fark nedir?

Başlık olarak her iki anlamını bulamıyorum diyor.

CEVAP
11 EYLÜL 2009, Cuma


Birbeyannamesitanımlayıcı tanıtır ve kendi türünü açıklar, türü, nesne ya da fonksiyon. Bir bildirimdirderleyici ihtiyacı olan şeybu tanımlayıcı başvurular kabul etmek. Bu beyanlar

extern int bar;
extern int g(int, int);
double f(int, double); // extern can be omitted for function declarations
class foo; // no extern allowed for type declarations

Birtanımaslında başlatır bu tanımlayıcı/uygular.linker ihtiyacı olan şeybu varlıklar için başvurular bağlantı için. Bu tanımlar yukarıda tanımlamalar karşılık vardır:

int bar;
int g(int lhs, int rhs) {return lhs*rhs;}
double f(int i, double d) {return i d;}
class foo {};

Bir tanım bir beyanname yerine kullanılabilir.

Bir tanımlayıcı olabilirilan ettiistediğiniz sıklıkta. Böylece, aşağıdaki C ve C yasal

double f(int, double);
double f(int, double);
extern double f(int, double); // the same as the two above
extern double f(int, double);

Ancak, olmalıtanımlanmıştam bir kez. Sen ve bir yere ilan başvurulan bir şey tanımlamak için unutursanız, o zaman linker için başvurular bağlamak için ne olduğunu bilmiyor ve eksik bir sembol şikayet ediyor. Sana bir şey birden çok kez tanımlarsanız, o zaman linker bilmiyorhangitanımları başvurular bağlamak ve yinelenen simgeleri şikayet ediyor.


Tartışmadan beri ne bir sınıftırbeyannamesivs bir sınıftanımC (diğer sorulara cevaplar ve yorumlar) geçiyor , C standart bir alıntı şuraya yapıştır.
C 03 söylüyor 3.1/2, At

O bir beyanname sürece bir tanımıdır [...] sınıf adı ilan-I aşk [...].

3.1/3 sonra birkaç örnek verir. Aralarında:

[Example: [...]
struct S { int a; int b; }; // defines S, S::a, and S::b [...]
struct S; // declares S
—end example

Özetle: C standardı struct x; olarak görmektedirbeyannamesive struct x {};tanım. (Başka bir deyişle,< . em ^"ileri bildirim" bir yanlış isimdiğer formları vardır hiç bu yana C. sınıf bildirimleri)

Onun cevapları bir gerçek bölüm ve ayet çıkardı kim litb (Johannes Schaub) için teşekkürler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dive In

    Dive In

    17 Temmuz 2013
  • Turkish Airlines

    Turkish Airl

    11 AĞUSTOS 2006
  • videoisunrelated

    videoisunrel

    5 Mart 2009