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 statusAber alle drei Dateien sind in einem Ordner!
http://www.qpic.ws/images/Buj46334.jpgWas 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, woraufwhat
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, woraufwhat
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 statusHast 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.