Ohne Headerdateien lauffähige Programme
-
Hi und danke für deine Antwort!
rüdiger schrieb:
Headerdateien enthalten nicht die Implementierungen der Funktionen..., sondern nur die Deklaration. Die Implementierung befindet sich in einer anderen c-Datei bzw. in einer bereits kompilierten Bibliothek.
...
In C99 wurde das implizite deklarieren zum Glück entfernt. Wenn du**
-std=c99 -pedantic-errors
**zu den Compilerflags hinzufügst, solltest du eine Fehlermeldung erhalten.Ich bin jetzt in den Compilersettings:
Das ist das Einzige, was ich finden konnte. Dein -std = c99 kann ich nicht finden.
Ich erhalte trotzdem keine Fehlermeldung, obwohl ich eine erhalten möchte
Bringt deinstallieren und neu installieren etwas? Ich hatte vorher den Dev C++ installiert und parallel dazu Code:Blocks, weil ich es als Alternative ausprobieren wollte. Dabei hat Code:Blocks zunächst den Compiler aus dem Verzeichnis von Dev C++ verwendet (habs aber geändert und verwende nun den von Code:Blocks installierten Compiler).
Ach herrje, ich bin ratlos
-
Sowohl DevC++ als auch Code::Blocks haben von sich aus einen uralten Compiler dabei. Eventuell mal einen aktuellen Compiler probieren?
-
Hi,
Janjan schrieb:
Sowohl DevC++ als auch Code::Blocks haben von sich aus einen uralten Compiler dabei. Eventuell mal einen aktuellen Compiler probieren?
okay, das wäre ein Versuch wert. Ich habe mir jetzt Borland C++ Compiler 5.5 runtergeladen und installiert. Code:Blocks scheint aber Schwierigkeiten zu haben, den Compiler zu finden. Wenn ich den Pfad manuell eingebe, kommt folgende Meldung:
Execution of 'bcc32.exe -q -w -v -I"C:\Program Files\Borland\BDS\4.0\include" -oobj\Debug\main.obj -c main.c' in 'D:\Program Files\CodeBlocks\Projects\nu' failed.
Gibt es eventuell einen anderen Compiler? Oder eine andere IDE? Ich muss gestehen, dass ich sehr von der VS C# IDE verwöhnt bin.
Womit programmiert ihr denn?
Danke und Gruß
-
ah nein, den BCC kannst du sofort wieder deinstallieren.
DevC++ und Code::Blocks sind keine Compiler! Sondern nur die Entwicklungsumgebungen. (DevC++ ist außerdem veraltet und fehlerhaft). Der Compiler der von beiden benutzt wird ist der MinGW-Compiler. Dabei handelt es sich um einer Portierung des GCCs für Windows. Inoffizielle MinGW Binaries die aber aktuelleren GCCs entsprechen findest du hier: http://www.tdragon.net/recentgcc/
Ich nutze kein Code::Blocks. Aber wenn es dort kein Flag für C99-Modus gibt (was ziemlich blöd wäre), dann kannst du sicher irgend wo eigene Flags aufschreiben. Bei Google hab ich auf die schnelle folgendes gefunden: http://forums.codeblocks.org/index.php?action=printpage;topic=7137.0
-
Hallo,
rüdiger schrieb:
ah nein, den BCC kannst du sofort wieder deinstallieren.
Magst du bitte begründen, weshalb ich den wieder deinstallieren soll? Ich dachte, der Borland Compiler sei empfehlenswert.
rüdiger schrieb:
Der Compiler der von beiden benutzt wird ist der MinGW-Compiler. Dabei handelt es sich um einer Portierung des GCCs für Windows. Inoffizielle MinGW Binaries die aber aktuelleren GCCs entsprechen findest du hier: http://www.tdragon.net/recentgcc
Okay, hab mir nun TDM/MinGW runtergeladen und installiert. Ich verwende für meine C Projekte den GNU GCC compiler. Der wird leider nicht gefunden (bei autopath) und wenn ich den Pfad manuell eingebe (zum neuen Installationsziel den TDM/MinGW), schaffe ich keine kompilierung. Fehlermeldung:
Execution of 'mingw32-gcc.exe -Wall -g -pedantic-errors -c "D:\Program Files\CodeBlocks\Projects\hallo\main.c" -o obj\Debug\main.o' in 'D:\Program Files\CodeBlocks\Projects\hallo' failed.
Was mache ich verkehrt?
[/quote]
Ich nutze kein Code::Blocks. Aber wenn es dort kein Flag für C99-Modus gibt (was ziemlich blöd wäre), dann kannst du sicher irgend wo eigene Flags aufschreiben. Bei Google hab ich auf die schnelle folgendes gefunden: http://forums.codeblocks.org/index.php?action=printpage;topic=7137.0[/quote][/quote]Okay, dank dir. Wenn ich das mit dem TDM/MinGW nicht auf die Reihe bekomme, muss ich das Flag manuell hinzufügen und mit nem "alten" Compiler arbeiten. Aber momentan finde ich C total schwer und kann nicht verstehen, wie man da durchblicken kann/soll
Was mache ich denn konkret verkehrt?
Danke und Gruß
-
Hast du den TDM GCC in einem Verzeichnis mit Leerzeichen installiert? Das wird nämlich afaik nicht unterstützt. Du kannst bei Project->Build Options->Debug/Release->(im Tab-Menü)Other options->-std=c99 eingeben (das sollte ungefähr so stimmen).
-
...und ich weiß nur nicht, was ich gemacht habe
Okay Leute, ich möchte euch nicht weiter belästigen. Ich habe das -std=c99 einpflegen können und nun bekomme ich auch eine Fehlermeldung.
Was -std=c99 ist und warum ich erst diesen Umweg mit ner neuen, inoffiziellen GCC machen musste, ist mir schleierhaft.
Vielen Dank an alle, die mir geholfen haben.
Gruß
-
al3ko schrieb:
Kenne das erstens aus C# und zweitens lese ich das Buch "C easy von Jürgen Wolf" wie auch das Openbook nebenbei
...
Aber momentan finde ich C total schwer und kann nicht verstehen, wie man da durchblicken kann/sollWoran das wohl liegen könnte?
http://w3.c-plusplus.info/forum/viewtopic-var-t-is-254601-and-postdays-is-0-and-postorder-is-asc-and-start-is-3.htmlHände weg von allem wo "Jürgen" und "Wolf" draufsteht.
Alle üblichen C-Compiler setzen voraus, dass der User weiss, was ein Compiler und was ein Linker macht. Compiler arbeiten mit Quelltexten(*.c, *.h), Linker mit Objektdateien. Wenn du einen Header weglässt, kann es geschehen, dass der Compiler einige Funktionen implizit deklariert, unter Umständen sogar passend. Wenn das Programm dann auch ohne Header läuft, liegt das daran, dass der Linker die betreffende Bibliothek trotzdem verlinkt hat.
al3ko schrieb:
Was -std=c99 ist und warum ich erst diesen Umweg mit ner neuen, inoffiziellen GCC machen musste, ist mir schleierhaft.
In C99 wurde das implizite Deklarieren zum Glück entfernt. Wenn du
-std=c99 -pedantic-errors
zu den Compilerflags hinzufügst, solltest du eine Fehlermeldung erhalten.
C99 ist der jüngste C-Standard, ISO/IEC 9899. Das ist kein Umweg, und du musst ihn nicht machen. Du tust es in dem Fall nur, damit du die Fehlermeldungen besser verstehst.
-
al3ko schrieb:
Aber eigentlich nicht das, was ich vermutet hatte und das laut der Literatur rauskommen sollte.
Was sollte denn laut der Literatur rauskommen?
-
Oh, okay. Dann muss ich mich nach einer anderen Literatur umsehen. Hier im Forum gibts bestimmt 100 Threads zu Buchempfehlungen. Ich stöber mal ein wenig
Laut Jürgen Wolf:
hallo.cpp(5):'printf':nichtdeklarierter Bezeichner
oder
Error. function 'printf' should have a prototypeBeispiel aus dem simplen Hello World Programm.
Gruß