Header Datei mehrmals verwenden
-
Original erstellt von <Daniel E.>:
Warum diese sinnlosen Includewaechter? Dafuer gibt es keinen Grund hier. Man kann beliebig viele Deklarationen einer externen Variable haben.ging es dir jetzt darum einfach mal was zu sagen? :p
ist doch irgendwie klar das das ein beispiel ist...
ausserdem wüsste ich nicht warum ich mir die angewohnheit der includewächter abgewöhnen sollte nur weil es in manchen spezial fällen nicht nötig wäre...[ Dieser Beitrag wurde am 30.08.2002 um 16:16 Uhr von japro editiert. ]
-
Kann man eine struct in C mehrfach deklarieren?
-
Original erstellt von cd9000:
Kann man eine struct in C mehrfach deklarieren?nein.
Woher soll der Compiler sonst wissen welche du meinst?
-
Warum sollte ich hässliche Inkludewächter in meine Programme einbauen? Um den Namespace vollzumüllen? Um mehr Macros zu definieren, als der Standard mir erlaubt?
Dass es "irgendwie, irgendwo, irgendwann" sinnvoll sein könnte bezweifle ich nicht. Aber diese Tipps, man sollte etwas immer im voraus planen sind schlecht ("initialisiere alle Variablen", "caste bei malloc \"zur Sicherheit\"" usw.).> Kann man eine struct in C mehrfach deklarieren?
nein.Bitte? Ich darf in C eine Struktur natürlich mehrfach "deklarieren".
-
Warum sollte ich hässliche Inkludewächter in meine Programme einbauen?
weil es vor fehlern schützt
Um den Namespace vollzumüllen?
häää? was haben die includewächter mit namespaces zu tun
Um mehr Macros zu definieren, als der Standard mir erlaubt?
das versetehe ich nochweniger... der standard erlaubt mir so viele makros zu definieren wie ich will!
Dass es "irgendwie, irgendwo, irgendwann" sinnvoll sein könnte bezweifle ich nicht. Aber diese Tipps, man sollte etwas immer im voraus planen sind schlecht ("initialisiere alle Variablen", "caste bei malloc \"zur Sicherheit\"" usw.).
was hat das damit zu tun...
95% der header die ich schreibe entahlten mehr als eine extern declarierte variable... in der regel solchen inhalt der die includewächter benötigt. es kostet mich mehr überlegung rauszufinden ob der include wächter unnötig ist als ihn einfach reinzuschreiben...
-
Original erstellt von japro:
**Warum sollte ich hässliche Inkludewächter in meine Programme einbauen?
weil es vor fehlern schützt
**Vor welchen?
Um den Namespace vollzumüllen?
häää? was haben die includewächter mit namespaces zu tunIch möchte den globalen Bezeichner "FOO_H" vielleicht noch irgendwo anders im Programm benutzten?
Um mehr Macros zu definieren, als der Standard mir erlaubt?
das versetehe ich nochweniger... der standard erlaubt mir so viele makros zu definieren wie ich will!Dir villeicht, mir nicht. 5.2.4.1?
95% der header die ich schreibe entahlten mehr als eine extern declarierte variable... in der regel solchen inhalt der die includewächter benötigt. es kostet mich mehr überlegung rauszufinden ob der include wächter unnötig ist als ihn einfach reinzuschreiben...
Hä?
Man braucht Includewächter _nie_, ausser man _definiert_ irgendetwas. Ist das so schwierig zu verstehen? Die Deklaration einer Variable/Funktion etc. kann ein C-Compiler oft lesen ...Wenn man in Headern andere Header einbindet, so kann ein Includewächter dazu dienen, die Übersetztungszeiten zu verkleinern.
[ Dieser Beitrag wurde am 31.08.2002 um 23:45 Uhr von Daniel E. editiert. ]
-
Original erstellt von Daniel E.:
Dir villeicht, mir nicht. 5.2.4.1?Du hast natuerlich recht, was die 'sinnlosen' IncludeWaechter betrifft. Aber meisten includiert ein header ja ein paar andere... in diesem Fall setze ich sehr gerne IncludeWaechter...
Und laut 5.2.4.1 darf ich mindestens 4095 Makros pro Uebersetunzgseinheit definieren... Fuer mich sind das genug...
Ausserdem: "Implementations should avoid imposing fixed translation limits whenever possible."
Ich möchte den globalen Bezeichner "FOO_H" vielleicht noch irgendwo anders im Programm benutzten?
IncludeWaechter sollten Unique Names haben. FOO_H ist IMHO kein Unique Name.
bei mir wuerde FOO_H so aussehen:
ts__foo_header___
und das will ich nirgendwo anders verwenden.
-
Original erstellt von Shade Of Mine:
**
Und laut 5.2.4.1 darf ich mindestens 4095 Makros pro Uebersetunzgseinheit definieren... Fuer mich sind das genug...
**Ich fürchte mich mich nach einem `#include <stdlib.h>' schon immer. Und dann kommt jemand anderes und bindet in Headern Header ein (wobei da gleich das nächste Limit auf einen zukommt ...) ...
bei mir wuerde FOO_H so aussehen:
ts__foo_header___
und das will ich nirgendwo anders verwenden.Du nicht, aber der Autor der Bibliothek "ts" mit Modul "foo"? Dieser Ärger mit der Namensgebung ist hausgemacht und könnte IMHO leicht vermieden werden.
-
Gibt es eine Alternative zu include-guards?
Bei mir funktionieren die nämlich nicht.
Vielleicht kann mir aber auch einer sagen, was ich falsch mache...
Meine Header-Datei sieht so aus:
#ifndef HAVE_PROGRESS_H
#define HAVE_PROGRESS_Hint progress = -1;
void start();
int getprogress();
void proceed();void start()
{progress = 0;}int getprogress()
{return (progress);}void proceed()
{progress++;}
-
Lyman25 schrieb:
Vielleicht kann mir aber auch einer sagen, was ich falsch mache...
Du liest nicht genau genug?
Lies japros und meine Posts ganz am Anfang -> Stichwort: extern
Und google mal nach ODR (One Definition Rule), siehe auch bens.c-plusplus.info (C++ FAQ)