Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[C] Deklarationen und Definitionen erkennen

  Alt 1. Jul 2007, 21:04
Hi,

ich traue mich kaum diese Frage zu stellen, doch ich möchte nun Gewissheit und wende mich an euch, auch wenn es noch so trivial sein könnte.

Ich möchte wissen, wie ich eine Deklaration und eine Definition erkennen kann. Meines Wissens werden die Begriffe in Pascal genau umgekehrt verwendet als in C, doch in C gibt's da einige Dinge, die in Pascal so gar nicht gehen.

Fakt ist, eine Definition reserviert Speicher, eine Deklaration nicht (zumindest in C). Nur muss ich nun erkennen können, was Speicher reserviert und was nicht.

Das hier ist glaub immer so und daher kann ich das nun erkennen:
Code:
int function(int a);   // Dekl.

int function (int a)   // Def.
{
  ...
}

int i;                 // Sowohl Dekl. als auch Def. Wieso, kA.
int i außerhalb der main-Funktion wäre eine Definition und das entsprechende extern i die zugehörige Deklaration. Sowas geht in Delphi meines Wissens nicht. Aber das ist auch nicht mein Problem, ich hab's nur ergänzend erwähnt.

Mir stellen sich nun einige Fragen und zwar diese:

Code:
const int i = 5;       // "sizeof i" liefert 4 Bytes
                        // mir wurde jedoch gesagt, Konstanten belegen keinen Speicher, was nun?

enum {A, B, C, D};     // "sizeof A" liefert 4 Bytes, ist im Prinzip aber auch eine Konstante

struct komplex {        // Ich hätte auf eine Dekl. getippt, aber "sizeof komplex" liefert 8 Bytes, wieso? o.O
  double Realteil;
  double Imaginaerteil;
};

struct komplex my_complex;  // Def. mit 8 Bytes, wie ich's auch gedacht hätte
Könnt ihr mir bitte verständlich erklären, wie ich sicher erkennen kann (ohne Compiler, sondern aus dem Kopf), was eine Definition und was eine Deklaration ist? Diese Begriffe werden sehr oft verwechselt, was normalerweise auch nicht schlimm ist, nur muss ich das (bis einschließlich Dienstag, danach nicht mehr )wissen.

Grüße
  Mit Zitat antworten Zitat