externe Variablen



  • Moin, ich versuch gerade, variablen in einem Makefile global zur Verfügung zu stellen.
    So weit ich das jetzt weiß, soll das mit "extern" in Headerdateien gehen.
    Ich hab also:

    #ifdef VARIABLEN_H
    #define VARIABLEN_H
    
    extern int a;
    extern int b;
    
    #endif
    

    Diese Header-Datei habe ich nun in meinem .c file hinzugefügt und wollte sie mit scanf bearbeiten. Nur meckert mein Compiler dann, dass a und b noch nicht deklariert wurden. Ich benutzte Dev C++.

    Gibt es da noch irgendwas, was ich beachten muss? 😕


  • Mod

    Dann hast du wohl irgendwas dabei falsch gemacht. Deine Beschreibung klingt aber korrekt. Daher: Bitte vollständiges Minimalbeispiel liefern, das den Fehler reproduziert und die genaue Fehlermeldung.



  • #include <stdio.h>
    #include "C:\...\variablen.h"
    
    int main (void)
    {
    	a=1;
    }
    

    [Error] 'a' was not declared in this scope
    [Error] [Add.o] Error 1

    Und die Headerdatei halt wie oben schon geschrieben.
    Inkludieren sollte eigentlich auch richtig sein, mit einer anderen Headerdatei (da waren ein paar Funktionen deklariert) im gleichen Verzeichnis hat es auf jeden Fall funktioniert.



  • Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.


  • Mod

    Youka schrieb:

    Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.

    Nein. Eine fehlende Definition würde sich ganz anders äußern. Hier fehlt die Deklaration.

    Es ist aber ganz einfach und hätte man schon im ersten Beitrag sehen können, wenn man scharfe Augen hat:

    #ifdef
    

    ->

    #ifndef
    

    Ich bemerke solche Fehler bei den Includeguards übrigens dadurch, dass ich beim Tippen da drauf achte, dass die ifndef- und die define-Zeile hinterher genau gleich lang sein müssen.



  • Danke schon mal für den Hinweis mit dem #ifndef, hab jetzt auch gesehen, dass ich das bei der funktionierenden Header Datei schon richtig gemacht hatte, bei der für die Variablen das n aber wohl irgendwie verpennt habe 😃

    Die alte Fehlermeldung taucht nun zum Glück auch nicht mehr auf, die neue ist dafür noch verwirrender 😃
    [Linker error] Add.o:Add.c:(.text+0xd): undefined reference to `a'



  • Youka schrieb:

    Deine Variablen wurden mit extern deklariert, was heißt, sie sind nur das Spiegelbild des Originals, was anderswo steht und in deinem Fall fehlt.

    Oder anders:
    In irgendeinem Code (.c-Datei) deines Projekts muss außerhalb einer Funktion
    auch die Variable definiert sein. Es fehlt ein

    int a;
    


  • Okay, danke, jetzt funktioniert es auch 🙂
    Auf jeden Fall in dem kleinen Programm, das aufs große zu Übertragen sollte dann machbar sein 🙂
    Danke an alle für eure tolle Hilfe 🙂


  • Mod

    Slisus schrieb:

    Die alte Fehlermeldung taucht nun zum Glück auch nicht mehr auf, die neue ist dafür noch verwirrender 😃
    [Linker error] Add.o:Add.c:(.text+0xd): undefined reference to `a'

    Das ist jetzt das was Youka meinte 🙂


Anmelden zum Antworten