Schreiben Sie ein C-Programm, das, wenn es kompiliert und ausgeführt wird, eine Meldung ausgibt, die angibt, ob der Compiler, mit dem es kompiliert wurde, die Verschachtelung von /* */ Kommentaren zulässt.
Die Lösung für dieses Problem ist unten angegeben: –
Sol:- Sie können ein Integer-Variablen-Nest haben:
int nest = /*/*/0*/**/1;
Wenn es verschachtelte Kommentare unterstützt, ist die Antwort 1, sonst ist die Antwort 0.
Wie funktioniert das? Ich verstehe die Variablendeklaration nicht.
Ein weiterer angenehmer Code ist strlen(/*/*/"*/*/"/*"/**/). Dies ist eine coole Übung für Websites wie Code Golf, aber als Interviewfrage höchst ungeeignet.
– Przemek
21. Oktober 2020 um 18:38 Uhr
Frauref
Wenn der Compiler keine Verschachtelung zulässt, wird die erste */ wird das Öffnen des mehrzeiligen Kommentars beenden, dh die 0 wird nicht auskommentiert. Mit einigen Leerzeichen geschrieben:
int nest = /*/*/ 0 * /**/ 1;
was zum Code führt
int nest = 0 * 1; // -> 0
Wenn es Verschachtelung erlaubt, wird es sein
int nest = /*/*/0*/**/ 1;
ergebend
int nest = 1;
Es ist nicht unbedingt das letzte überhaupt */ in der Datei, die es beenden würde, wenn es Verschachtelung unterstützt. Wenn das damals so wäre /**/0*1/**/ würde mich nicht als registrieren 0*1, sondern als Kommentar. Mit oder ohne Verschachtelung sollte der Compiler dies so sehen 0*1
– redbmk
14. Juli 2011 um 19:17 Uhr
Da der SO-Syntax-Highlighter keine Verschachtelung unterstützt, suggeriert die Hervorhebung im letzten Beispiel amüsanterweise die Semantik des ersten Beispiels ^_^
– Leichtigkeitsrennen im Orbit
28. Februar 2018 um 11:45 Uhr
Die kurze Antwort auf “Wie funktioniert das?” lautet:
int nest = /*/*/0*/**/1;
mit verschachtelten Kommentaren wird so etwas wie:
Oder ich denke, das ist, was passiert, aber diese Frage ist so ziemlich eine Katastrophe. Ich stimme dem Kommentar von Blagovest Buyukliev vollkommen zu.
int nest = /*/*/0*/**/1;
Verschachtelung nicht erlaubt
Wenn Verschachtelung NICHT erlaubt ist, ist der Bereich des ersten Kommentars:
vvvvv
int nest = /*/*/0*/**/1;
Nachdem dieser Kommentar entfernt wurde (Lücke zur besseren Lesbarkeit gelassen – der C++-Präprozessor ersetzt ein einzelnes Leerzeichen, bei C nicht sicher), ist der nächste Kommentar:
vvvv
int nest = 0*/**/1;
Damit auch entfernt:
int nest = 0* 1;
Verschachtelung erlaubt
Unter dem |+- Zeile zeigt den Umfang des äußeren Kommentars und vvvvvv gibt den Umfang des inneren Kommentars an.
+---------+
| |
| vvvvvv |
int nest = /*/*/0*/**/1;
Nachdem diese Kommentare entfernt wurden:
int nest = 1;
Wenn es verschachtelte Kommentare unterstützt, haben Sie (Entfernen der Kommentare):
int nest = 1;
Wenn dies nicht der Fall ist, haben Sie (Entfernen der Kommentare):
int nest = 0 * 1;
Das ist eine große Tüte abscheulicher Verletzungen. Meine Vermutung ist, dass der dritte / hebt möglicherweise den zweiten mehrzeiligen Kommentarblock auf und rendert die * nach der Null eine Multiplikation, also:
Ein weiterer angenehmer Code ist
strlen(/*/*/"*/*/"/*"/**/)
. Dies ist eine coole Übung für Websites wie Code Golf, aber als Interviewfrage höchst ungeeignet.– Przemek
21. Oktober 2020 um 18:38 Uhr