Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18

Thema: C: public const

  1. #1
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    C: public const

    Ich habe da so ein C-Programm. Vereinfacht sieht das so aus:
    const.h:
    Code:
    #ifndef const_h
    #define const_h
    extern const float cst;
    #endif
    const.c
    Code:
    #include "const.h"
    const float cst = 5.0;
    modul1.c
    Code:
    #include "const.h"
    modul2.c
    Code:
    #include "const.h"
    Kompiliert wird mit
    for f in *.c; do gcc -c $f; done; gcc *.o -o main; ./main

    Was hier mein Problem ist ist folgendes:
    Wenn ich neue Konstanten hinzufüge finde ich das recht umständlich und fehleranfällig das in const.c und const.h zu tun. Kann man das auch einfacher, d.h. zentral alles in einer Datei?

    Jetzt mal von einem #define abgesehen - die mag ich nämlich überhaupt nicht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Wie wäre es mit
    Code:
    const float foobar=42;
    in der const.h?

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Nein, genau das geht eben leider nicht. GCC legt da offenbar irgendwie zweimal speicher an oder so

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Das static natürlich nicht vergessen
    Code:
    static const double foo=0.8/15;

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Hmm. Ich dachte static sei eben gerade *nicht* global. Aber ich lasse mich natürlich gerne eines besseren belehren falls mich das weiterbringt

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Ja, es wird nicht exportiert, genau das willst du doch, dass in jeder Datei, die const.h inkludiert, die Constante "neu" definiert wird.

  7. #7
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Wenn es nicht unbedingt eine echte Konstante sein muss:
    Code:
    #ifndef const_h
    #define const_h
    
    #define CST 5.0
    
    #endif
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  8. #8
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von Joghurt
    Ja, es wird nicht exportiert, genau das willst du doch, dass in jeder Datei, die const.h inkludiert, die Constante "neu" definiert wird.
    Hmm, stimmt. So gehts auch. Danke!
    Mein Ansatz war immer nur *einmal* eine solche Variable zu machen - aber wenn es in jeder Datei eine hat und die statisch ist ist das natürlich auch ok.

    @panzi: Ja. Das hab ich auch an einem Ort machen müssen für die Definition der Grösse eines Arrays (das nachher statisch ist) - aber ich mag #defines nicht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  9. #9
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Warum magst du #defines nicht? Die sind 'ne schöne Sache. Haben mir schon etliche Wartungsstunden erspart

  10. #10
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Wie wäre es mit
    Code:
    const float foobar=42;
    in der const.h?
    Nein, genau das geht eben leider nicht. GCC legt da offenbar irgendwie zweimal speicher an oder so
    Da möchte ich doch zum wiederholten Male auf einen Vorteil von C++ hinweisen. In C++ hat man nämlich die Semantik des obigen Konstruktes so definiert, daß die hier beabsichtigte Verwendung erlaubt ist. Was ja auch absolut Sinn macht.

  11. #11
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von locus vivendi
    In C++ hat man nämlich die Semantik des obigen Konstruktes so definiert, daß die hier beabsichtigte Verwendung erlaubt ist. Was ja auch absolut Sinn macht.
    Hier geht es aber um C.

  12. #12
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Verwende doch #define. In C verwendet jede #define, in C++ verwendet man enum.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  13. #13
    Registrierter Benutzer Avatar von oracle2025
    Registriert seit
    18.03.2002
    Beiträge
    136
    Ich nehme mal stark an, dass extern das selbe für eine Variable ist, was ein Funktions Prototyp für eine Funktion ist.

    Eine Funktion tut man ja auch nicht einfach komplett in den header rein, sondern die muss man sozusagen auch zweimal definieren.
    Niemand dringt hier durch und
    gar mit der Botschaft eines Toten.
    Du aber sitzt an Deinem Fenster und
    erträumst sie Dir, wenn der Abend kommt.

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von 7.e.Q
    Warum magst du #defines nicht? Die sind 'ne schöne Sache. Haben mir schon etliche Wartungsstunden erspart
    Ich mag konstanten besser. Voilà.
    Meine antipatie den Dingern gegenüber wurde kürzlich bestätigt als ich bei einem Kollegen 10 Minuten Fehler gesucht habe (er hate vorher 4 Stunden damit verbracht) der mit define sehr gut möglich und kaum zu finden, aber mit Const ein Ding der Unmöglichkeit war...

    @locus vivendi: Meinst du ich wurde gefragt ob ich jetzt auch wirklich C verwenden will?
    Aber danke für den Hinweis, der Unterschied war mir nicht bewusst. Aber ich kann nicht darauf bauen dass der Betreffende der für die Verwendung von C verantwortlich ist nicht bemerkt dass da g++ im Makefile steht...

    @panzi:
    Wie geht der mit Enum? Naja, egal. #define mag ich nicht und mit static const int ist das Problem sauber gelöst

    @oracle2025: Genau. Aber für Variablen ist das deklaration-definition einfach nur doof (oder anders gesagt noch doofer als für Funktionen, ich konnte dem noch nie was abgewinnen).

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Registrierter Benutzer Avatar von oracle2025
    Registriert seit
    18.03.2002
    Beiträge
    136
    Zitat Zitat von peschmae
    @oracle2025: Genau. Aber für Variablen ist das deklaration-definition einfach nur doof (oder anders gesagt noch doofer als für Funktionen, ich konnte dem noch nie was abgewinnen).
    Tja, so ist das halt in C/C++, in D ist das wohl besser gelöst
    Niemand dringt hier durch und
    gar mit der Botschaft eines Toten.
    Du aber sitzt an Deinem Fenster und
    erträumst sie Dir, wenn der Abend kommt.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •