Problem mit den Header-Dateien



  • Ich habe Folgendes versucht:

    Das ist die Funktion.

    // print_sth_twice.c
    #include "print_sth_twice.h"
    
    void print_sth_twice(char *what)
    {
    	printf(what + " " + what);
    }
    

    Dazu der Funktionsprototyp:

    //print_sth_twice.h
    extern void print_sth_twice(char *);
    

    Und diese Funktion versuche ich jetzt zu testen:

    // main.c
    #include "print_sth_twice.h"
    
    int main()
    {
    	print_sth_twice("Test");
    }
    

    Doch wenn ich es mit dem gcc-Compiler versuche zu compilen ("g++ main.c"), bekomme ich nur folgende Ausgabe:

    %userprofile%\AppData\Local\Temp/ccC8clls.o:main.c:(.text + 0x32): undefined reference to "print_sth_twice(char*)"
    collect2: ld returned 1 exit status

    Aber alle drei Dateien sind in einem Ordner!
    http://www.qpic.ws/images/Buj46334.jpg

    Was habe ich falsch gemacht und wie kann ich es zukünftig besser machen? 😛



  • gcc main.c print_sth_twice.c
    

    aber das

    printf(what + " " + what);
    

    funktioniert nicht!

    So macht man das

    printf("%s %s", what, waht);
    


  • Vielleicht sollte man erklären, warum

    printf(what + " " + what);
    

    nicht geht.

    C nimmt (im Gegensatz zu anderen Sprachen) die Operatoren sehr genau ohne wenn und aber, d.h. '+' führt stets eine Addition. Um aus "hallo " und "Welt" ein "hallo Welt" zu machen, braucht man keine Addition sondern Konkatenation.

    Wie gesagt, C sieht ein + und er addiert einfach die Werte die links und rechts vom +. what ist ein Zeiger, also speichert eine Addresse. " " ist eine konstante Zeichenkette, die irgendwo im Speicher sich befindet. what + " " ist also die Addition von der Addresse, worauf what zeigt, und wo " " abgelegt wurde.



  • supertux schrieb:

    Wie gesagt, C sieht ein + und er addiert einfach die Werte die links und rechts vom +. what ist ein Zeiger, also speichert eine Addresse. " " ist eine konstante Zeichenkette, die irgendwo im Speicher sich befindet. what + " " ist also die Addition von der Addresse, worauf what zeigt, und wo " " abgelegt wurde.

    naja, pointer mit pointer addieren geht auch nicht in C, nur abziehen geht.
    🙂



  • Danke dafür, aber ich bekomme immer noch den selben Fehler (so weit ist der Compiler scheinbar gar nicht gekommen) ausgegeben:

    %userprofile%\AppData\Local\Temp/ccC8clls.o:main.c:(.text + 0x32): undefined reference to "print_sth_twice(char*)"
    collect2: ld returned 1 exit status

    😕



  • Hast du die stdio.h eingebunden?



  • C-reator schrieb:

    Danke dafür, aber ich bekomme immer noch den selben Fehler (so weit ist der Compiler scheinbar gar nicht gekommen) ausgegeben:

    %userprofile%\AppData\Local\Temp/ccC8clls.o:main.c:(.text + 0x32): undefined reference to "print_sth_twice(char*)"
    collect2: ld returned 1 exit status

    😕

    Hast du den Aufruf so gemacht, wie ich es geschrieben habe?

    rüdiger schrieb:

    gcc main.c print_sth_twice.c
    

    oder besser

    gcc -Wall -Wextra -std=c99 -pedantic-errors main.c print_sth_twice.c
    


  • Oh, rüdiger, das hab ich wohl ganz übersehen :p
    Danke, so funktioniert es - natürlich musste ich auch noch stdio einbinden, auch danke @monstermunchkin.


Anmelden zum Antworten