Funktionen definieren in VisualC++2008


  • Mod

    Erikson schrieb:

    Ach so Dankse! Dann bin ich ja voll aufm Holzweg dachte C++ compiler können auch C compilieren.

    In der Regel ja, bis auf einige kleine Ausnahmen. Schwierigkeiten machen eher genau diese Hacks wie du sie hier verwendest. Default int zu benutzen (und das auch noch falsch) ist eher etwas für den IOCCC und nicht für ein modernes C-Programm.



  • Ach so das Buch heisst "C programmierung von Anfang an" vom rororo Verlag. Finde mich da ja gerade erst richtig rein. Hatte mal C programmierung in der Ausbildung das lag mir aber nicht. Assembler ging da schon besser. Auf Grund meines bevorstehenden Studiums wollte ich mich aber im Vorfeld schonmal damit beschäftigen und bis jetzt finde ichs auch sehr interesant.



  • Wenn das da so drin steht, werden auch noch andere Macken drin sein. Dann taugt das Buch nichts.

    Das ist noch das C von K&R*. Das ist seit 1989 vorbei. 'Damals' wurde C als C89 oder ANSI-C genormt. Aus Kompatibilität kann man auch Heute noch int als Default annehmen.

    Aber guter Stil ist das nicht.

    *Bei K&R sieht aber die Paramterliste anders aus.



  • Da du ja wohl mit Visualstudio arbeitest, solltest du, wenn du wirkliches C und nicht C++ programmieren willst, dies dem Compiler auch bekanntgeben:

    - Projekteigenschaften / C/C++ / Erweitert / Kompilierungsart / /TC
    oder
    - die cpp-Dateien in c-Dateien umbenennen

    Damit erreichst du wirklichen C Code und tappst nicht in diverse Fallen wie hunderte Leute vor dir.



  • Ich dachte es ist vieleicht sinnvoll mit C anzufangen und später auf C++ umzusteigen. Ich arbeite mit visual c++ 2008 express so wies aussieht ist das voll auf c++ ausgelegt. Hat bisher aber alles reibungslos geklappt. Bis auf Fehler die ich mir selbst zuzuschrieben hatte!?



  • Erikson schrieb:

    Ich dachte es ist vieleicht sinnvoll mit C anzufangen und später auf C++ umzusteigen.

    Ist durchaus möglich, aber nicht sinnvoll. Auf diese Weise sammelst du nur massenhaft Programmiertaktiken, die in C notwendig sind, aber in C++ als schlechter Stil (oder schlimmeres) angesehen werden.



  • Habe auch noch icc win 32 aufm Rechner da hab ich den code von oben mal reincopiert und der zeigt mir dann an defaulting to int. Der compiler scheint das also zu verstehen aber dafür zeigt er mir immer folgenden Fehler:

    syntax error; missing semicolon before 'end of input'

    diesen fehler zeigte mir der compiler früher schonmal. Da ich beim besten willen kein Fehlendes semicolon entdecken konnte wechselte ich damals auf visual c++.

    Weiss echt nich was ich machen soll iwie muss dass doch funktionieren. Würde gerne bei visual c++ bleiben komme damit gut klar.



  • Erikson schrieb:

    Ich arbeite mit visual c++ 2008 express so wies aussieht ist das voll auf c++ ausgelegt.

    Meine (ANSI-) C Programme von 1993 kann ich damit übersetzten.
    Bei jeder neuen VS Version meckert der Compiler aber immer etwas neues von wegen unsicheren Funktionen an. Die Warnungen kann man aber abschalten.



  • Erikson schrieb:

    Weiss echt nich was ich machen soll iwie muss dass doch funktionieren.

    Gehe davon aus, dass der Compiler immer Recht hat.
    Alternativ kannst du deinen Code auch mit Onlinecompilern austesten, z.B.
    http://codepad.org
    http://ideone.com

    Erikson schrieb:

    Würde gerne bei visual c++ bleiben komme damit gut klar.

    Dann mache das doch. Und zu Beginn jedes Projektes bietet sich an:

    #undef UNICODE
    #undef _UNICODE
    #pragma warning( disable:4996 )
    

    nebst des o.g. Schalters /TC.



  • Erikson schrieb:

    syntax error; missing semicolon before 'end of input'

    Schau mal nach, ob du in der letzten Zeile (die mit der } ) auch die Enter-Taste gedrückt hast.
    Es muss dann noch eine Zeile 19 geben, die aber leer ist.


  • Mod

    Der icc ist auch wieder ein reinrassiger C Compiler, mit dem funktioniert das mit dem default int.

    Falls du weiterhin einen C++ Compiler benutzen möchtest, sei dir im klaren, dass C keine Untermenge von C++ ist, auch wenn das oft gesagt wird. Ein paar Dinge gehen eben nicht. Und Sachen aus dem C99-Standard meistens erst recht nicht. Oftmals kann man C++-Compilern aber auch beibringen, sich wie ein C Compiler zu benehmen (wenn man auf C99-Kompatibilität verzichtet). Wie dir schon gesagt wurde, kannst du mal ausprobieren, der Datei einfach eine .c Endung zu geben.



  • So zur Rückmeldung es Funktioniert jetzt in Visual C++ durch umbennnen der datei auf datei.c Finde die Lösung nicht gerade gut den das scheint nur zu funkitonieren wenn man vorher ein Jungfräuliches Projekt öffnet. Also müsste ich daran immer denken. Es muss doch gehen , dass von Visual C++ von Anfang an eine .c und keine.cpp Datei angelegt wird!? Die Option zum umstellen auf TC finde ich leider nicht.

    Ach so und was genau (Bitte für Dumme 😋 ) versteht denn der compiler nicht das er überhaupt int als default annhemen muss. Ich müsste ihm ja auch sagen können verwende int und dann wär gut oder nicht? Wenn ja wo? Wie? An welcher Stelle muss da int stehen?



  • Bei einer Funktionsdefinition mußt du normalerweise einen Rückgabetyp angeben, d.h. mit int new_line() oder void new_line() ist auch ein C++ Compiler zufrieden. Du hattest dort oben keinen Rückgabetyp angegeben und deshalb den Compiler verwirrt.



  • Wenn du aber einen anderen Rückgabetyp als void angibst, musst du auch einen Wert mit return zurückgeben.

    Den Rückgabewert brauchst du aber nicht auswerten.
    Z.B. gibt printf die Anzahl der geschriebenen Zeichen zurück oder im Fehlerfall eine negative Zahl.



  • Danke jetzt hab ichs verstanden. Einfach Typ des Rückgabewertes vor meine definierte Funktion schreiben. Dann klappts auch. Steht ein paar seiten weiter auch in dem Buch. Das hätte man dort allerdings früher erwähnen können. Wenn man schon ein Buch schriebt müsste ja bekannt sein das es da mit einigen compilern probleme geben kann. Na ja ich kann jetzt jedenfalls in Ruhe weiter dran arbeiten.

    Nur das dauerhafte umstellen von Visual C++ 2008 Express gelingt mir immernoch nicht. Ich finde die option einfach nicht wo ich auf TC umstellen kann. Wenn einer hier auch damit arbeitet wäre es echt nett wenn er mir das nochmal genau erläutern konnte. Den von Wutz erklärten Weg scheint es nicht zu geben. Oder ich bin zu dumm es zu finden.

    DANKE!



  • Dann taugt der Erlenkötter also auch nichts, naja, wieder mal ein Streichkandidat.



  • Na ja das würde ich nicht gleich sagen. An sich gefällt mir das Buch ja gut. Hab mehr verstanden als in meiner Ausbildung. Hätte mir mal damals schon ein Buch dazu kaufen sollen. Die Erklärungen sind auf jeden Fall einfach und verständlich. Wenn man wirklich noch nie was von C gehört hat ist das Buch wohl nicht die beste Wahl.


Anmelden zum Antworten