modularisierung spukt..

  • hallo!

    C spukt. und ich hab den beweis, vielleicht sieht jemand den wald, ich sehe ihn vor läuter bäumen leider nicht.

    mein programm ist "modularisiert". daher: ich hab ein main.c file, (darin die main methode) und ein extern.c file. darin eine beispielmethode die ich aus main aufrufen möchte. Zusätzlich hab ich in extern.h (header datei) ein struct. dieses include ich in extern.c. in main include ich extern.h und alles funktioniert.

    soweit, sogut.

    wenn ich das ganze jetzt wiederhole, also ein extern2.h file mache + extern2.c file, diese sauber include, (also extern2.h in extern2.c include und extern2.h in main.c inklude, GEHT DAS NICHT.

    das ist ein witz.

    auf http://www.learnclip.com/cspukt.zip das beispiel. bitte um hilfe.

    lg, danke, alex

  • --- extern2.h beispiel code ---


    struct names_st{

    char first[10];


    };

    //typedef names_st names;

    --- code ende ---

    solange "typedef names_st names;" ausgeblendet wird, passt alles. aber wehe es wird aktiviert. funktioniert es nicht. obwohl ich ein ähnliches dummy struct in extern.h mit selber syntax habe! ) [typedef type varname;]

  • dieses main/extern beispiel hab ich nur gepostet, weil bei meinem projekt diese modularisierung nicht funktioniert, und hier habe ich bestimmt kein "struct" syntax falsch geschrieben: http://www.learnclip.com/LearnClip.zip

    ich vermute, dass es aufgrund der prozeduralen vorgangsweise des compilers fehler in der registrierung (speicherreservierung im register) der struct variabeln gibt.

    BEISPIEL:

    extern1 file --

    struct a {

    struct b

    }

    extern 2 file --

    struct b {

    struct a

    }

    main file --

    include extern 1 - fehler, weil struct b noch nicht bekannt


    gibt es da eine schöne lösung? ein pattern?

    trotzdem danke für deine hilfe! im folgenden die fehlerausgabe (in lc.c) befindet sich die main zum ausführen.


    F:\Programme\PellesC\Projects\LearnClip\LC.c(42): warning #1039: [ISO] No newline at end of file.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(7): error #2078: Invalid struct field declarations.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(7): error #2001: Syntax error; found 'configuration' expecting '}'.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): error #2001: Syntax error; found '*' expecting ';'.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(10): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_BOOK.h(13): error #2156: Unrecognized declaration.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(6): error #2121: Redeclaration of 'unit'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(25): error #2001: Syntax error; found 'configuration' expecting '}'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): error #2001: Syntax error; found '_unit' expecting ';'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): warning #2099: Missing type specifier.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(26): error #2082: Invalid initialization type; found 'void *' expected 'int'.
    F:\Programme\PellesC\Projects\LearnClip\LC_UNIT.h(28): error #2156: Unrecognized declaration.

  • hm... also wie ich das sehe, haben sowohl struct a als auch struct b eine unendlichen speicheranforderung, kein wunder dass das so net geht. evtl solltest da auf pointer auf die structs zurückgreifen?

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • stell dir vor, du willst speicher allozieren für diese struktur.
    Wenn struct a nicht in b enthalten ist, schauts so aus:

    Code
    struct a {
      struct b {
        ...
      }
      ...
    }


    Bei deinem Aufbau alloziert er folgendes:

    Code
    struct a {
      struct b {
        struct a {
          struct b {
            struct a {
    ...

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • schau dir mal bitte mein anderes (neueres) beispiel an! ich bin mir jetzt nicht sicher, ob wir das selbe meinen, und wenn ja, warum ich nicht structs in structs haben kann. - denn das ist definitiv möglich.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!