external linkage - mit structs..?

  • Hallo & guten Abend,


    in meinem beispielprojekt funktioniert leider etwas nicht ganz so, wie ich es mir wünsche. vielleicht könnte mir hier jemand helfen, ich wäre sehr dankbar! also:

    ich hab zwei files. die eine "main.c" die andere "extern.c"

    die main.c sieht so aus:

    #include <stdio.h>

    int main(){
    printf("Test");
    int ergebnis = mulitpliziere(3,4);
    return 0;
    }

    die extern.c sieht so aus:

    #include <stdio.h>

    typedef struct{

    int x;
    double y;
    float z;

    }struktur;

    int multipliziere(int a, int b){

    return a * b;

    }

    ----------------------------

    dabei kann ich aus der main.c file heraus die funktion mulipliziere ansprechen. aber auf mein struktur objekt nicht. ein "struct struktur test;" ist nicht möglich. auch mit pointern kann ich nicht arbeiten, da ich keinen pointer in meiner main funktion deklarieren kann, der eben vom typ struktur ist, da der compiler den nicht findet. habs auch mit "external" experiementiert, aber mein bauch sagt mir, dass ich etwas prinzipielles übersehe.

  • Das Problem ist, dass der Compiler in main.c keine Kenntnis von dieser Struktur hat. Du solltest sie deshalb in einer Header-Datei definieren (z.B in extern.h).
    Das selbe solltest du auch für multipliziere machen, damit der Compiler die Argumentanzahl und -typen überprüfen kann.

    main.c

    Code
    #include <stdio.h>
     #include "extern.h"
    
    
    int main(){
      printf("Test");
      int ergebnis = mulitpliziere(3,4);
      return 0;
    }

    extern.h

    Code
    typedef struct{
      int x;
      double y;
      float z;
    }struktur;
     
     int multipliziere(int a, int b);

    extern.c

    Code
    int multipliziere(int a, int b){
      return a * b;
    }

    Ich hoff das funktioniert dann so (habs net ausprobiert).

  • an das hab ich auch schon gedacht, vielen dank für den tip! es sollte funktionieren, da ja andere typdefs/structs (zb.: time_t) ebenso ansprechbar sind..

Jetzt mitmachen!

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