Ergebnis 1 bis 20 von 21
Thema: Compiler für C
-
27.02.2010, 11:31 #1UndeadShadow
Compiler für C
ich programmiere zur Zeit mit C und benutze den Dev-C++ Compiler. Was mir nur auffällt, vor allem im Gegensatz zu Visual Basic, mit dem ich früher programmiert habe, ist dass haufenweise Fehler nicht zu analysieren sind. Beispielsweise gibt es ständig diese "Build errors". Es kommt nur die Fehlermeldung, aber kein Hinweis, WO der Fehler verursacht wird.
Der Debug-Modus von Visual Basic wäre hier schon wirklich sehr praktisch. Ich weiß aber nicht, ob es den in nem Compiler für C überhaupt gibt.
Deshalb wollte ich mal fragen, ob jemand einen dem entsprechenden Compiler für C kennt.
Würde mich über Antworten freuen.
-
-
27.02.2010, 13:53 #2ummp
AW: Compiler für C
-
28.02.2010, 01:52 #3HardAndSoft
AW: Compiler für C
Hallo UndeadShadow,
wieso nimmst du nicht die Visual Studio Express Edition? Ist gratis und bietet den gewohnten Visual Studio Komfort auch bei C++.
Download hier: --> http://www.microsoft.com/germany/Exp...usexpress.aspx
Viel Spaß!
-
04.03.2010, 22:52 #4UndeadShadow
AW: Compiler für C
Hm, stimmt eigentlich ^^
Bist du nur auch sicher, dass der auch für C funktioniert? Also ohne die Erweiterung C++?
-
05.03.2010, 06:30 #5HardAndSoft
AW: Compiler für C
Naja, bisher benutzt Du ja auch den DevC++ Compiler - also bleibst Du bei C++.
Standard-C-Compiler gibts heute nur noch selten, und ehrlich gesagt habe ich noch nicht ausprobiert, ob man bei der Express Edition auf C zurückgreifen kann. Meines Wissens verfolgt Microsoft konsequente Objektorientierung im Visual Studio, da dürfte Standard-C eher abgemeldet sein...
-
05.03.2010, 10:17 #6Kelshan
AW: Compiler für C
Nein, das ist kein Problem. Natürlich kann man mit Visual C++ genauso reines C programmieren wie C++. C++-Compiler sind abwärtskompatibel (VC zumindest).
-
05.03.2010, 17:42 #7UndeadShadow
AW: Compiler für C
Ah ok.
Was mich nur wundert, ist, dass der Code dort ein bisschen anders ist als in sämtlichen anderen C-Compilern. Beispielsweise ist der Name der main-Funktion ein bisschen verändert und grundsätzlich lassen sich keine Funktionen definieren nach meinem bis jetzt gelernten Schema.
-
05.03.2010, 18:00 #8Kelshan
AW: Compiler für C
Wenn man ein ganz normales komplett leeres C++ Projekt erstellt, dann eine main.cpp Quelldatei per Hand einfügt, kann man darin ganz normal die main-Methode definieren wie überall sonst auch (GCC, DevC++). Zusätzlich gibt es eben noch spezielle auf Windows ausgelegte Varianten (winmain), aber es verlangt ja keiner die zu nutzen.
Und ich weiß ja nicht nach welchem Schema du Methoden definierst, aber auch das sollte normalerweise funktionieren wie überall sonst.
-
07.03.2010, 18:15 #9UndeadShadow
AW: Compiler für C
Ok danke, mit dem ganz leeren Projekt klappt das.
Allerdings gibts schon noch ein paar Sachen, die nicht so ganz wollen.
Z.B. die scanf-Funktion. Der erzählt da immer, dass die unsicher wäre und ich lieber scanf_s schreiben soll.
Oder kann ich in einer Funktion keine andere mehr aufrufen. Ich habe ganz oben eine Struktur geklariert, dann 4 Funktionen und anschließend die main-Funktion. Allerdings kommt immer die Nachricht "Bezeichner wurde nicht gefunden, wenn ich am Ende der 1. Funktion Funktion 2 aufrufen will.
-
07.03.2010, 19:10 #10UndeadShadow
AW: Compiler für C
Allerdings bringt der jetz bei immer mehr Funktionen, dass ich noch "_s" anhängen sollte, weil es scheinbar unsicher ist. Beispiel hierfür ist jetz noch die "fgets"-Funktion.
Weißt du, warum der das meldet? Ich mein, beim Dev-C++ kam das nicht :?
-
07.03.2010, 22:12 #11HardAndSoft
AW: Compiler für C
Die Funktionen mit _s am Schluss sind gegen Buffer Overflow gehärtet.
Allerdings versteht kein anderer Compiler die _s Funktionen (eigene Erfindung von Microsoft); insofern musst Du dann bei Microsoft bleiben, wenn Du die Funktionen verwendest. Gerade als Anfänger helfen einem diese Funktionen, die eigenen Programme etwas sicherer zu machen. Wenn natürlich keine Veröffentlichung Deines Codes geplant ist (also nur für den Eigenbedarf), dann bleib bei den Standardfunktionen.
-
08.03.2010, 16:09 #12UndeadShadow
AW: Compiler für C
Und welche Funktionen werden von Microsoft gegen Buffer Overflow (btw: was ist das eigentlich?) gehärtet?
Kann man sagen, dass das eine bestimmte Gruppe von Funktionen betrifft oder ist das bei allen?
Und was genau verstehst du unter Veröffentlichung des Codes? Meinst du damit, dass ich daraus ein richtiges Programm mache und dann anderen gebe?
-
08.03.2010, 17:52 #13Kelshan
AW: Compiler für C
Bei den Funktionen musst du generell auf die Reihenfolge der Deklarierung achten: Du kannst in Funktion 1 nicht Funktion 2 aufrufen, wenn diese nicht schon vor der Deklarierung von Funktion 1 bekannt gemacht hast. Das sollte aber eigentlich in jedem C/C++ Compiler so sein.
Das mit den sicheren/unsicheren Funktionen kann man eigentlich völlig ignorieren. Das sind ja auch nur Warnungen, keine Fehler. Diese Warnungen kann man sogar abschalten, wenn es dich stören sollte.
Mit "Veröffentlichung des Codes" meinte er, dass du den C Quelltext weiter gibst, damit andere (evtl. sogar unter anderen Betriebssystemen wie Linux) es sich selbst für ihr System kompilieren können. Wenn man das vor hat, sollte man natürlich nur Funktionen verwenden, die auch mit anderen Compilern zusammen funktionieren. Denn Visual C++ gibt es natürlich unter Linux oder MacOS nicht.
Wenn du dagegen eh nicht vor hast den Quelltext weiterzugeben, brauchst du darüber gar nicht groß nachdenken. Allgemein würde ich die Warnungen einfach ignorieren und gut ist.
-
08.03.2010, 22:56 #14HardAndSoft
AW: Compiler für C
Buffer overflow betrifft zumeist die Stringverarbeitung. Wenn ein Programm nicht prüft, wie lang die zulässigen Eingaben sind, und eine zu lange Eingabe einem String zuweist, dann kann es schon mal zu einem Overflow (überlauf) kommen. Es gibt gezielt herbeigeführte Überläufe, mit denen man auf diese Art und Weise Schadcode ausführen kann.
Hier der Artikel in der Wikipedia: --> Puffer
Wenn du Dein kompiliertes Programm weitergibst, dann sollte es gegen so einen Buffer Overflow gesichert sein. Wenn Du hingegen nur den Source Code weitergibst, dann können andere nur mit den Standardfunktionen etwas anfangen.
Man sollte sich generell Längenüberprüfungen bei Eingabewerten angewöhnen, sonst sind die eigenen Programme immer latent unsicher.
-
09.03.2010, 17:46 #15UndeadShadow
AW: Compiler für C
Also darauf war ich zum Glück auf mal selber drauf gekommen, allerdings war das im Dev-C++ compiler nicht so.
Sonst ist mir jetzt eigentlich alles klar. Danke.
Hab nur noch eine Frage, die mit dem Thema jetzt weniger zu tun hat:
Was ist der Unterschied zwischen einer Struktur und einer Klasse? Soweit ich das weiß, gibt es bei der Klasse bestimmte mit eingebaute Funktionen, die aufgerufen werden, wenn irgendwas mit der Klasse passiert. Außerdem soll es die Struktur nur in C und die Klasse in C++ geben.
Kann mir das noch jemand genauer erklären? Wäre echt nett
-
09.03.2010, 18:20 #16Kelshan
AW: Compiler für C
Wenn du einen C++ Compiler benutzt, ist der Unterschied zwischen struct und class extrem gering. Der einzige mir bekannte Unterschied ist, dass der Zugriff auf Funktionen und Variablen bei einer struct per default public ist, und bei einer class per default private. Um das zu verdeutlichen:
Code:struct meine_struct { int variable1; int variable2; private: void irgendeine_funktion(); //implementierung egal } class meine_klasse { int variable1; int variable2; public: void irgendeine_funktion(); //implementierung egal } int main(...) { meine_struct structtest; meine_klasse classtest; structtest.variable1 = 5; //geht, da alles per default public classtest.variable1 = 5; // Fehler, da per default private structtest.irgendeine_funktion(); //Fehler, da per Hand auf private gesetzt classtest.irgendeine_funktion(); //geht, da per Hand auf public gesetzt }
Davon ab kann man bei C++ mit einer Struct alles machen, was man mit einer Klasse auch machen kann. Struct ist noch ein Überbleibsel aus C Tagen (erste Anfänge der Objektorientierung) und hauptsächlich zur Kompatibilität noch vorhanden.
Eingebürgert hat sich bei mir persönlich, structs eher für kleine "Datenspeicher" zu nutzen (sprich kaum eigene Methoden/Logik, dafür öffentliche Variablen), und class eher als "arbeitende Objekte" mit vielen Methoden und interner Logik.
In reinem C ist die Struct jedoch stark abgespeckt, z.B. gibt es wohl keine Klassenmethoden. Das ist aber nur von Interesse, wenn du wirklich gezwungen bist reines (klassisches) C zu programmieren. Dort stellt sich die Frage ja auch gar nicht, da es "class" in reinem C nicht gibt.
-
10.03.2010, 20:53 #17UndeadShadow
AW: Compiler für C
Also würdest du anderen auch nicht unbedingt empfehlen, C an sich zu lernen, sondern gleich C++?
Weil ich hab damit jetzt so ein bisschen angefangen, weil das ja die Grundlage für alle anderen Programmiersprachen ist.
-
10.03.2010, 21:05 #18Kelshan
AW: Compiler für C
Im Grunde ja, man sollte/kann ruhig schon mit C++ anfangen. C++ ist noch "low-level" genug, dass man die wichtigsten Aspekte von C eh zwangsläufig mitlernt, es sei denn vielleicht man schöpft sofort voll aus der Standardbiliothek. Du kannst natürlich erstmal Tutorials/Leerbücher für reines C durcharbeiten, dagegen würde ich auch nicht unbedingt etwas sagen. Ich würde aber jedoch selbst natürlich kein Programm mehr in reinem C programmieren, wenn es sich vermeiden lässt. Einfach weil schon C++ - obwohl auch seinerseits bereits sehr altmodisch - deutlich komfortabler ist als reines C.
In den meisten größeren C++ Turorials/Büchern die ich kenne, werden in den ersten Kapiteln sowieso erstmal die notwendigsten C-Grundlagen durchgekaut, und dann zum eigentlichen C++ umgeschwenkt. Was sicher auch sinnvoll ist.
-
13.03.2010, 16:40 #19UndeadShadow
AW: Compiler für C
Es ist mal wieder ein anderer Fehler aufgetreten, bzw. mehrere (?), die bei dem Dev-C++ compiler noch nicht vorgekommen sind...
1>------ Erstellen gestartet: Projekt: Test, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>TestCo.cpp
1>Verknüpfen...
1>TestCo.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl insert_Lagerverwaltung(char * const,long,int)" (?insert_Lagerverwaltung@@YAHQADJH@Z)" in Funktion ""void __cdecl get_Lagerverwaltung(void)" (?get_Lagerverwaltung@@YAXXZ)".
1>C:\Dokumente und Einstellungen\Julian Hellmann\Eigene Dateien\Visual Studio 2008\Projects\Test\Debug\Test.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Julian Hellmann\Eigene Dateien\Visual Studio 2008\Projects\Test\Test\Debug\BuildLog.htm" gespeichert.
1>Test - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
15.03.2010, 23:27 #20Kelshan
AW: Compiler für C
Es ist eine Funktion deklariert (insert_Lagerverwaltung), deren Implementierung der Linker nicht findet. Falls du die selbst programmiert hast, ist die cpp-Datei mit der Implementierung wohl nicht im Projekt enthalten. Ist die Funktion Teil einer Bibliothek, die du benutzt, so ist diese im Projekt nicht korrekt verlinkt.
Ähnliche Themen
-
Problem mit C-Compiler: Hi, Da ich vorhabe in Zukunft ein wenig für den NDS zu programmieren, habe ich mir vorgenommen C zu lernen. Nun habe ich auch ein entsprechendes...
Naja, das sollte man halt schon vom Verhalten Russlands abhängig machen. Es bringt ja nichts, wenn man durch den Handel am Ende nur den Restock von...
Der Ukraine-Konflikt 2022