wieder mit dem Zeiger



  • Original erstellt von <francais>:
    wer hat denn gesagt, dass ich malloc() in einem C++-Programm verwende??
    Du kannst aber toll zwischen den zeilen lesen! Du solltest Politiker werden!

    Du hast das gesagt. Mit einem C++ Compiler compiliert man nun mal C++ Programme und keine C Programme (oder ist das bei dir anders? kompilierst du auch C++ Programme mit ADA Compilern?)

    **

    Nein, mal im Ernst. Ich habe nur von einem C++-Compiler gesprochen und dass diese in den meisten Schulen und Universitäten verwendet werden.

    **

    Ja, zum compilieren von C++ Programmen, wir reden hier aber von C. Es gibt sehr wohl noch C Compiler und C Programme werden idr. mit C Compilern übersetzt. Deswegen gibt es ja noch 2 unterschiedliche Programmiersprachen! Ich glaub du hast da nicht so viel Ahnung, kann das sein?

    ad 3) Die überwiegende Literatur schlägt vor, aus Sicherheitsgründen ein
    casten zu verwenden.

    Welche Sicherheit? Nenn mir einen Sicherheitsvorteil den das bringt (nenn mir überhaupt einen Vorteil, den das bringen soll), eigentlich sorgt es nur dafür, dass man leicht einen Bug einbauen kann.



  • Original erstellt von Daniel E.:
    Welche außer der hier angeführten meinst Du? Ich hätte gesagt, dass das Typenkonzept das gleiche ist, von der bewusst in C eingeführten 'Lücke' abgesehen.

    Wenn ich mich nicht irre, sollte sizeof('a') == 1 mit C++ sein. Mit C kann dass zwar in einigen Fällen zutreffen, ist aber selten. (Ich weiß dass ich Dir in dieser Beziehung nicht's neues erzähle... *g*)

    zu dem Thema auch interessant: Incompatibilities Between ISO C and ISO C++

    EDIT & OT: In Design und Entwicklung von C++ nennt Stroustrup einige Entwurfsrichtlinien für C++. U.a. sind dort in der Liste aufgeführt: 'Typunterscheidung durch den Linker', 'Typermittlung zur Laufzeit' und anderes. Ich denke, C hat diese Dinge nicht zu bieten...

    [ Dieser Beitrag wurde am 03.01.2003 um 17:00 Uhr von mady editiert. ]



  • hi,
    ich finde es immer nett, wenn einem Leute etwas unter die Schuhe schiebt, was man nicht gesagt hat.

    @kingruedi,
    guter Witz!
    Ich weiß als langjähriger Programmierer + Dozent sehr wohl zwischen C- und C++-Programmen zu unterscheiden.

    Meine Aussage war stets folgende:
    1.
    An den meistn Schulen und Universitäten wird nun mal entweder der C++-Compiler
    von microsoft eingesetzt oder der von borland oder der dev-c++.
    Es wird also auf der Basis von wiindows gearbeitet.

    2. Auch mit diesen Computern kann man C-Programme compilieren.
    3. Wenn man bei diesen Compilern den cast weglässt, führt dies unweigerlich
    zu Abstürzen.
    4. Man muss die Schüler/ Studierenden natürlich auf die Gefahren des Casts
    aufmerksam machen

    MfG



  • Original erstellt von <francais>:
    **hi,
    ...1.
    An den meistn Schulen und Universitäten wird nun mal entweder der C++-Compiler
    von microsoft eingesetzt oder der von borland oder der dev-c++.
    Es wird also auf der Basis von wiindows gearbeitet.

    2. Auch mit diesen Computern kann man C-Programme compilieren.
    3. Wenn man bei diesen Compilern den cast weglässt, führt dies unweigerlich
    zu Abstürzen.
    4. Man muss die Schüler/ Studierenden natürlich auf die Gefahren des Casts
    aufmerksam machen

    MfG**

    *lol* - weder mein Borland-Compiler (bcc32) noch die damit erstellten Programme sind jemals wegen eines fehlenden casts (im kontext dieses threads) abgestürzt. Es ist natürlich ein Unterschied, ob der C++ Compiler im C Mode oder im C++ Mode kompiliert. Sinnvollerweise sollte man C Programme im C Mode übersetzen....



  • @mady,
    ich sprach hauptsächlich vom microsoft bzw. devc++-compiler.
    mfg



  • Den MS-C++Compiler besitze ich nicht. Von einem DevC++ Compiler habe ich noch nie was gehört....

    Wahrscheinlich meinst Du die IDE DevC++ mit dem gnu-c Compiler... Hier gilt das gleiche, was ich bereits zum BCC gesagt habe. C Programme im C mode übersetzen und es gibt keine Probleme ... Ich kann mir nicht vorstellen, dass der MS-VC das anders handhaben sollte. Vielleicht kann das mal jemand prüfen?



  • Original erstellt von mady:
    Wenn ich mich nicht irre, sollte sizeof('a') == 1 mit C++ sein. Mit C kann dass zwar in einigen Fällen zutreffen, ist aber selten.

    Das hat aber nichts mit dem Typensystem zu tun, sondern liegt schlicht und einfach daran, dass 'a' in C ein Literal vom Typ 'int' ist.
    Dass C nicht C++ ist, und dass Inkompatiblilitäten nicht zu knapp sind, ist mir durchaus bewusst, hat aber nicht sehr viel mit meiner Frage zu tun. Falls diese nicht so klar war, nochmal: Wo wird in C eine Typenumwandlung durchgeführt, die es in C++ nicht gibt, von der Konvertierung void* -> anyrealtyp* abgesehen?



  • Original erstellt von Daniel E.:
    ... Wo wird in C eine Typenumwandlung durchgeführt, die es in C++ nicht gibt, von der Konvertierung void -> anyrealtyp abgesehen?**

    Hmmm ... stimmt. Meine Antworten haben nicht viel mit dieser Frage gemeinsam. Mir fällt jetzt auch tatsächlich kein Fall ein, wo C++ das anders handhabt als C.

    Somit muss ich meine Aussage (... viele implizierte Typumwandlungen ...) korrigieren: In C++ wird ein cast benötigt, weil diese implizierte Typumwandlung abgeschafft wurde.



  • Original erstellt von <francais>:

    Meine Aussage war stets folgende:
    1.
    An den meistn Schulen und Universitäten wird nun mal entweder der C++-Compiler
    von microsoft eingesetzt oder der von borland oder der dev-c++.
    Es wird also auf der Basis von wiindows gearbeitet.

    ??

    2. Auch mit diesen Computern kann man C-Programme compilieren.

    C++ != C, wenn du das eh weisst, sollte das kein Problem sein für dich dies zu verstehen. Fals diese Compiler C Modi anbieten (also eigentlich einen C Compiler haben), dann ist es etwas anderes.

    3. Wenn man bei diesen Compilern den cast weglässt, führt dies unweigerlich
    > zu Abstürzen.

    Wenn man diesen Cast benutzt führt es ggf. zum Absturz. Wenn man diesen Cast nicht benutzt sollte alles vernünftig laufen, außer man benutzt einen C++ Compiler, dann sollte man sich aber Gedanken machen, ob man nicht doch lieber C++ programmieren sollte oder zu einem C Compiler wechseln sollte (hier nochmal das Beispiel, man würde ja auch kein C++ mit einem Lisp Compiler compilieren lassen)

    4. Man muss die Schüler/ Studierenden natürlich auf die Gefahren des Casts
    > aufmerksam machen

    Ja, dass muss man. Ich verstehe dich nicht. Wenn du glaubst, dass ohne Casts das alles noch viel gefährlicher ist, wieso willst du dann die Stundenten drauf aufmekrsam machen? Außerdem verstehe ich nicht, ob du wirklich glaubst, dass die das umsetzen, wenn ihr Lehrer das noch nicht einmal beherscht?

    Kann es sein, dass du einfach nur nicht eingestehen konntest, dass du unrecht hattest?



  • <francais>:

    Microsoft mag ja viele Fehler in seinem Compiler haben aber sicherlich nicht diesen.

    Der Compiler beschwert sich nicht wenn man C-Programme mit VC++ compiliert und den Cast "vergißt".
    Aber nur dann nicht wenn die Dateiendung *.c ist denn dann wird der C-Modus des Compilers aktive.
    Sollte die Endung *.cpp sein dann ist der C++-Modus aktive und dann gibts probleme.
    Vieleicht solltest du das nächste mal nicht so überheblich sagen das du Dozent bist. Dies läßt mich nämlich für die Zukunft deiner Studenten nichts rosiges ersehen.


Anmelden zum Antworten