AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [C] Deklarationen und Definitionen erkennen
Thema durchsuchen
Ansicht
Themen-Optionen

[C] Deklarationen und Definitionen erkennen

Ein Thema von Matze · begonnen am 1. Jul 2007 · letzter Beitrag vom 2. Jul 2007
 
Olli
(Gast)

n/a Beiträge
 
#7

Re: [C] Deklarationen und Definitionen erkennen

  Alt 2. Jul 2007, 01:48
Zitat von Matze:
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.
extern könnte man eher mit einem forward (in Delphi nur für Funktionen und nur in der gleichen Datei - abgesehen von Includes! - gültig) vergleichen. Da in Delphi keine sichtbare Trennung von Compiler und Linker existiert, kann es das in Delphi so auch nicht geben, denn extern besagt ja, daß da irgendwo ein Symbol dieses Namens existiert, was zur Linkzeit dann zur Verfügung stehen wird.

Code:
const int i = 5;       // "sizeof i" liefert 4 Bytes
                        // mir wurde jedoch gesagt, Konstanten belegen keinen Speicher, was nun?
Wer hat das gesagt? Der sizeof-Operator sieht, daß es eine "Variable"/Konstante des Typs int ist und stellt damit nur fest, daß die Größe dann 4 ist. Abgesehen davon belegen Konstanten natürlich auch Speicher, nämlich in der EXE- Das ist aber compilerabhängig und damit eine andere Diskussion.


Code:
enum {A, B, C, D};     // "sizeof A" liefert 4 Bytes, ist im Prinzip aber auch eine Konstante
Was die Voreinstellung ist, da Aufzählungen kompatibel zu Integers sind. Übrigens läßt sich (wie in Delphi auch) die Bittigkeit der Aufzählungstypen auch in C/C++ festlegen.

Stell dir sizeof als Operator vor der nur auf Typen angewendet werden kann. Sobald dort eine Variable oder Konstante (also eine "Instanz" eines Typs) steht, wird implizit die Größe des Typen der "Instanz" ermittelt (s.o.).

Code:
struct komplex {        // Ich hätte auf eine Dekl. getippt, aber "sizeof komplex" liefert 8 Bytes, wieso? o.O
  double Realteil;
  double Imaginaerteil;
};
Bei einem double würde ich 16 Byte gesamt erwarten, aber in jedem Fall haben wir es hier mit soetwas wie einem Typen (wenn auch nicht einem echten typedef) zu tun. Das wäre übrigens etwas wo ich stolpern würde, weil ich das intuitiv als "lokalen Typ" ansehe und somit in der Tat als Deklaration. Als typedef würde es dann zu einem "globalen Typ" geadelt.

Code:
struct komplex my_complex;  // Def. mit 8 Bytes, wie ich's auch gedacht hätte
Was ist denn das für ein Compiler, bei dem double nur 4 Byte breit ist?

Bei Funktionen ist es ganz einfach. Ohne Rumpf ist es eine Deklaration, mit Rumpf eine Definition. Beim Rest ist das alles sehr schwammig, wenn es also für eine Vorlesung ist, am besten an das vorgegebene Material halten. Genau wie Fahrschule
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz