Anzeige:
Ergebnis 1 bis 7 von 7

Thema: [C] in foo.c definierte Variablen in *.c nutzen

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30

    [C] in foo.c definierte Variablen in *.c nutzen

    moin

    ich habe eine datei, def.c, wo einige definitionen drinnen sind, zb arrays & structs. diese sollen in einigen anderen dateien verfuegbar seien, und die gespeicherten werte sollen fuer alle funktionen gleich sein
    (sagen wir in def.c ist int zahl=0 defeniert, und funktion peter in der datei kuchen. sagt zahl = 1. nun macht funktion gabi in der datei torte.c printf("%d\n", zahl); sollte 1, nicht 0 kommen)
    geht das ueberhaupt so? denke ja, soll ja mit extern ermoeglichtwerden?!

    wenn ja, wie wende ich das korrekt an? habe zb ne struktur in def.c


    Code:
    /*
    Structure for the default arguments
    */
    struct __default {
    	char def_gip[MAX_ARG_LEN];
    	char def_log[MAX_ARG_LEN];
    	char def_exe[MAX_ARG_LEN];
    	char def_get[MAX_ARG_LEN];
    	char def_ssh[MAX_ARG_LEN];
    	
    	char def_SER[MAX_ARG_LEN];
    } _default;

    in einer anderen bla.c steht in einer funktion
    Code:
    			if ( (r = strcmp( CMD[0], tmp ) ) == 0 )
    				strcpy(_default.def_gip, arg);
    nun meckert der dadrueber

    */home/freeka/stuff/progging/my0wn/rim/rimc/src/read_config.c:86: warning: passing arg 1 of `strcmp' from incompatible pointer type
    */home/freeka/stuff/progging/my0wn/rim/rimc/src/read_config.c:87: error: request for member `def_gip' in something not a structure or union



    habe zuvor in der datei

    Code:
    extern *CMD[];
    extern _default;

    nun, wie geht das nun korrekt?

    danke

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von Freekazonid
    habe zuvor in der datei
    Code:
    extern *CMD[];
    extern _default;
    Das Problem hier ist, daß du keinen Typ angegeben hast, und der Compiler dann standardmäßig int annimmt.
    Damit werden auch die beiden Compilermeldungen verständlich, denn weder ist ein int* (von extern int *CMD[]; ) ein korrektes Argument für strcpy.
    Noch ist ein int (von extern int _default; ) eine Struktur.

    Du mußt also jeweils den Typ angeben,dh. zb. für _default
    Code:
    extern struct __default _default;
    Dazu muß natürlich struct __default bekannt sein.
    Dazu teilst du dein Progamm so auf
    sdefault.h
    Code:
    #ifndef SDEFAULT
    #define SDEFAULT
    struct __default {
    ...
    };
    
    extern struct __default _default;
    #endif
    sdefault.c
    Code:
    #include "sdefault.h"
    struct __default _default;
    Überall, wo du jetzt _default benutzen willst, bindest du den Header sdefault.h ein.

    Achja, fange keine Variablen/Typen mit Unterstrichen an, es sieht nicht nur dumm aus, es ist auch nicht erlaubt.
    Geändert von wraith (24-08-2004 um 18:07 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    danke fuer die antwort funktioniert bestens, auch wenn die aufteilung meinerseits so nicht gedacht war, aber das ist nicht weiter schlimm

    Achja, fange keine Variablen/Typen mit Unterstrichen an, es sieht nicht nur dumm aus, es ist auch nicht erlaubt.
    warum?
    bei allen variablen/funktionen/whatever, die keywords seien koennten bzw welche sinds, setze ich __ oder einfach _ davor, um halt zu zeigen das die variable/funktione/whatever eigen ist

    und wieso soll das nicht erlaubt seien, hab in anderen sourcen auch schoen oefter variablen/funktionen/whatever gesehen die mit _ oder __ anfingen

  4. #4
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von Freekazonid
    warum?
    bei allen variablen/funktionen/whatever, die keywords seien koennten bzw welche sinds, setze ich __ oder einfach _ davor, um halt zu zeigen das die variable/funktione/whatever eigen ist

    und wieso soll das nicht erlaubt seien, hab in anderen sourcen auch schoen oefter variablen/funktionen/whatever gesehen die mit _ oder __ anfingen
    Im Standard steht
    7.1.3 Reserved identifiers
    1 Each header declares or defines all identifiers listed in its associated
    optionally declares or defines identifiers listed in its associated
    subclause and identifiers which are always reserved either for
    scope identifiers.
    — All identifiers that begin with an underscore and either an uppercase
    underscore are always reserved for any use.
    — All identifiers that begin with an underscore are always reserved
    with file scope in both the ordinary and tag name spaces.
    Die vereinfachte Merkregel davon ist, "Fange nie einen Typ/Variable mit einem Unterstrich an".

  5. #5
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    mh najja ok, koennen sie wenigstens mit nem unterstrich enden? habe mal bei einem source gesehen, da wurde bei jeder eingenen funktion XXX als prefix genommen, was ich sehr haesslich fand

  6. #6
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von Freekazonid
    mh najja ok, koennen sie wenigstens mit nem unterstrich enden?
    Ja, das können sie .

    Unter C++ Programmierern ist es auch ganz besonders 'in' seine Klassenmember mit einem Unterstrich enden zulassen.
    IMO ist das auch total häßlich.
    habe mal bei einem source gesehen, da wurde bei jeder eingenen funktion XXX als prefix genommen, was ich sehr haesslich fand
    Sieht stark nach Zerbst aus .

    Wie wäre es mit _t, als Suffix (für Typen).
    Andere beginnen structs mit s_.

  7. #7
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    Zitat Zitat von wraith
    Ja, das können sie .

    Unter C++ Programmierern ist es auch ganz besonders 'in' seine Klassenmember mit einem Unterstrich enden zulassen.
    IMO ist das auch total häßlich.
    c++'ler machen das? na dann mach ich das nicht

    Sieht stark nach Zerbst aus .

    Wie wäre es mit _t, als Suffix (für Typen).
    Andere beginnen structs mit s_.

    ya es war tatsaechlich der zerbst, zu zeiten wo ich noch windows genutzt hatte und dachte spiele programmieren sei nicht schwer

    naja wenn dann ein einheitlich prefix oder suffix, aber mischen ist auch net soo nett. ich werd mir was einfallen lassen was ich nehm

Lesezeichen

Berechtigungen

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