Wo ist der Fehler ?



  • Original erstellt von Bitsy:
    **
    #if 0
    jetzt staunst Du aber
    #endif
    **

    Das ist fies. Dann muss er ja fast einen eigenen Präprozessor nachprogrammieren für

    #if 34 < 23
     jetzt staunst Du aber
    #endif
    

    Ich würde sowas als 3 Zeilen Code ansehen, wenn ich so ein Programm bauen müsste. Oder willst Du nur den Fall '#if 0' ausnehmen.



  • Ich habe solch einen Präprozessor sogar derzeit in Arbeit, deshalb kenne ich den Fall gut. Solch ein Block findet sich tatsächlich in der Q2-Source.

    Der Nutzen eines solchen Präprozessors liegt auf der Hand:
    Replace in Files von Symbolen (also nicht in Strings oder Comments),
    Aufsuchen von bestimmten Situationen,
    Sourceformatierung, etc.
    Programmzeilenzählen ohne Comments pur wäre als Nebenfunktion möglich.

    Gleichwohl muss ich sagen, dass jener 'Structurizer' auch nur eine Teilmenge aller denkbaren Projekte behandeln kann. Man denke an 'offene' Macros, oder gar includes, stringize-Token, oder ##. Also doch eher ein 'private only'-Projekt.

    [ Dieser Beitrag wurde am 09.11.2002 um 21:06 Uhr von Bitsy editiert. ]



  • Original erstellt von Bitsy:
    **Und was ist mit Tee?

    #if 0
    jetzt staunst Du aber
    #endif

    char xxx[]="und das\
    //gibt Dir den Rest\
    ";

    [ Dieser Beitrag wurde am 09.11.2002 um 18:27 Uhr von [qb]Bitsy** editiert. ][/QB]

    Äh... Wie jetzt... Tee ?!?

    Ausserdem soll die Funktion sämtliche Quelltextzeilen zählen AUSSER Kommentarzeilen.
    Deine if und endif-Bedingung da oben ist kein Kommentar, wird also als 3 Zeilen mitgezählt. Und die Sache darunter enthält in der zweiten Zeile einen Kommentar, sonst doch nicht, und wird somit als 2 Zeilen gezählt, was doch richtig ist.
    Oder was willst du mir sagen?

    Mit euren nachfolgenden Texten zum Präprozessor bin ich als C-Anfänger momentan überfordert...



  • Original erstellt von <Casi666>:
    Deine if und endif-Bedingung da oben ist kein Kommentar, wird also als 3 Zeilen mitgezählt.

    ja, aber es wird NIE ausgefuehrt, insofern könnte man es für kommentare nutze...

    Und die Sache darunter enthält in der zweiten Zeile einen Kommentar,

    nein!

    char xxx[]="und das\
    //gibt Dir den Rest\
    ";
    ist gleich
    char xxx[]="und das//gibt Dir den Rest";



  • und wenn man das in nem anständigen Editor schreibt sieht man sogar das das in der zeiten Zeile kein Kommentar ist... 😉



  • @Casi:
    Jetzt mach Dir über diese Spezialfälle mal keine Gedanken, die dürften in der Praxis kaum vorkommen. Trotzdem sind sie zumindest denkbar, und mit ein wenig Böswilligkeit könnten Dich andere mit sowas ärgern. Bringst Du die Fälle irgendwie mit unter, bist Du derjenige, der zuletzt lacht.

    Und:
    Wenn Du nicht werbegeschädigt bist, hat es keinen Sinn die Sache mit dem Tee zu erklären. 😉



  • Okay, keine Gedanken machen kann ich besonders gut 🙂

    Die Sache mit den #if-Sachen stimmt natürlich, aber dafür gibt es ja Konventionen laut ANSI an die man sich halten sollte betreffs Kommentare 🙂

    Und die zweite Sache wusste ich so nicht. Hast natürlich Recht, es wird als Kommentar erkannt, da ich das Ding ja so programmiert habe und nicht wusste, dass sowas wie in deinem Beispiel geht *arghz*

    Anway: Danke, okay und Gute Nacht *grinsel*



  • Original erstellt von Shade Of Mine:
    ja, aber es wird NIE ausgefuehrt, insofern könnte man es für kommentare nutze...

    Es verhält sich aber schon ein wenig anders:

    /* 'bla */                          /* darf */
    
    #if 0
       'bla                             /* darf nicht */
    #endif
    

    Also ist es kein vollwertiger Ersatz für richtige Kommentare.



  • Original erstellt von Daniel E.:
    *```cpp
    #if 0
    'bla /
    darf nicht */
    #endif

    Nicht? Beim VC++ gehts ... Jaja, ich hör euch schon wieder schreien, aber wieso sollte es nicht gehen?



  • Der Text zwischen #if und #endif muss für den Präprozessor verständlich sein. Hier ist es das nicht, weil ein Literal (eingeleitet durch ') nicht abgeschloßen wurde.

    btw: Wenn der MSVC das so durchgehen lässt, was macht er dann bei "?


Anmelden zum Antworten