Hallo, ich frage mich gerade was folgender Code bewirkt: if(0) { variable=1; } umgekehrt könnte ich auch fragen was würde dann if(1) bedeuten ? Bei if(1) würde ich sagen, daß die if-Abfrage immer ausgeführt werden würde, also die variable immer auf 1 gehen würde. Andersherum würde aber doch dann if(0) niemals erfüllt werden. VERWIRR Danke für eure Antworten Gruß Karlson
Wird wohl auch niemals ausgeführt. Sieht aus wie ein Stück sinnloser Code, mit dem man eigenen Code markieren kann.
Eigentlich genau das, was du mit if(1) schreibst. Der Code wird immer ausgeführt, die If-Schleife könnte man sich sparen. Wo hast du das denn her? cmfcmf
Karlson vom Dach schrieb: > Bei if(1) würde ich sagen, daß die if-Abfrage immer ausgeführt werden > würde, also die variable immer auf 1 gehen würde. > > Andersherum würde aber doch dann if(0) niemals erfüllt werden. Richtig.
Ups, Frage ja schon beantwortet. Herzlichen Dank. Das steht so in einem SPS-Programm. Ich frage mich nur warum ?
Ihr habt natürlich Recht, das wird nie ausgeführt. Doof, dass man seine Beiträge nicht bearbeiten kann.
Könnte auch sein daß es immer ausgeführt wird. Ich weiß nicht wie der Compiler das wertet wenn nur ein Element angegeben wird.
Auf alle Fälle würden if(0) und if(1) immer konträr zueinander sein. Also wurscht, welche Anweisung jetzt nichts macht und welche was macht, kann man sagen daß eine der beiden definitiv nie erfüllt ist.
jaja. Ich weiß. Es gibt nur while Abfragen und If Schleifen...
Christian F. schrieb: > Eigentlich genau das, was du mit if(1) schreibst. Der Code wird immer > ausgeführt, die If-Schleife könnte man sich sparen. Wo hast du das denn > her? Echter Blödsinn. 1. Die Anweisung "variable=1;" wird nicht ausgeführt, da der Ausdruck "(0)" nicht wahr ist. 2. Eine "If-Schleife" gibt es nicht. 3. Ein guter Compiler entfernt das ganze Konstrukt. 4. Ein besserer Compiler gibt eine Warnung aus. 5. Ein noch besserer Compiler meldet dich zum nächsten C-Kurs an.
könnte es sein das das kein "von Hand" geschriebener Code ist sondern durch irgend ein Programm oder Script generierter?
Karlson vom Dach schrieb: > Das steht so in einem SPS-Programm. Ich frage mich nur warum ? Höre auf zu plenken und sage gleich, dass es eine SPS-Anweisung ist. Ist doch ganz einfach!
Ich würd sowas einfügen um meinen Code zu markieren. Sieht für den klauenden Laien aus wie echter Code und stört kein bißchen im Programm.
Heinz schrieb: > Christian F. schrieb: >> Eigentlich genau das, was du mit if(1) schreibst. Der Code wird immer >> ausgeführt, die If-Schleife könnte man sich sparen. Wo hast du das denn >> her? > > Echter Blödsinn. > > 1. Die Anweisung "variable=1;" wird nicht ausgeführt, da der Ausdruck > "(0)" nicht wahr ist. Sag ich doch. Andererseits ist if(123) aber schon wahr. Das hab ich gerade in VS2010 ausprobiert. Man könnte also sagen, daß alles außer if(0) wahr ist. > > 2. Eine "If-Schleife" gibt es nicht. Gut, ich glaube das weis jetzt jeder > > 3. Ein guter Compiler entfernt das ganze Konstrukt. Quatsch > > 4. Ein besserer Compiler gibt eine Warnung aus. Schon eher > > 5. Ein noch besserer Compiler meldet dich zum nächsten C-Kurs an. Sag ich nichts dazu, weil ich einfach nur wissen wollte, was jemand damit bezwecken möchte. Der Code wurde nicht generiert. Ich sitzte geade vor einem ziemlich mächtigem Projekt welches auch astrein funktioniert und ansonsten ziemlich trickreich programmiert wurde. Wenn du denjenigen nicht kennst und auch nciht einschätzen kannst, solltest du dir deine arroganten Kommentare verkneifen.
Es ist keine SPS Anweisung. Sondern C-Code. Es gibt nämlcih auch SPSen die man in ANSI-C oder auch schon objektorientiert programmieren kann. Da die meisten aus Unwissenheit darüber nicht bescheid wissen, denken sie immer automatisch an FUP oder KOP. Ja, die Zeiten haben sich geändert.
Mich erinnert das an eine alte Anleitung noch aus Win98-Zeiten. Hier der Auszug: [Zitat] Aber noch mal zum HexView von der WinAmp.Exe, da steht ja dieses tolle R„tsel am Anfang: if (billg != satan) exit(1); else ShowNiftyWinamp(); billg: das ist eine wahrhaftige Globale Variable, diese hat immer den Wert 0 (der Wert berechnet sich irgendwie aus der Produktqualit„t der Firma) satan: ist keine globale Variable, sondern eine nur in Unterweltfunktionen benutzte. Deren Wert kennen wir nicht! Aber er ist ganz einfach zu berechnen. Dafr wird die If abfrage einmal nach C++ regeln umgestellt. if (billg == satan) ShowNiftyWinamp(); else exit(1); Ok, alles beim alten, Bill Gates ist der Satan! [\Zitat]
Karlson vom Dach schrieb: > Sag ich doch. Andererseits ist if(123) aber schon wahr. Das hab ich > gerade in VS2010 ausprobiert. Man könnte also sagen, daß alles außer > if(0) wahr ist. Das sind ja nun absolute C-Grundlagen, das 0 unwahr ist, und alles andere als wahr gilt. Der Code wird ein Rest aus der Testphase sein. Es muss nicht immer #if oder /* */ oder // sein.
DirkB schrieb: > Der Code wird ein Rest aus der Testphase sein. Ja, da könntest du allerdings Recht haben. Da habe ich noch gar nicht dran gedacht.
Für dieses Beispiel mit nur einer Zeile und C ist es ungewöhnlich. Aber in Programmiersprachen, die keine mehrzeiligen oder verschachtelten Kommentare kennen, kann man damit diese Einschränkungen umgehen.
if(0) wird gerne verwendet, um Code zeitweise auszukommentieren. Der Grund ist eine Unzulänglichkeit der C-Kommentar Zeichen /* */, sie lassen sich nicht verschachteln. Man kann aber auch #if ... #endif nehmen zum Auskommentieren. Peter
if (4294967296) ist für die meisten Compiler übrigens wieder falsch ;)
Karlson vom Dach schrieb: >> >> 3. Ein guter Compiler entfernt das ganze Konstrukt. > > Quatsch Warum sollte das Quatsch sein? gcc tut das, und das ist gut so.
Rolf Magnus schrieb: > Karlson vom Dach schrieb: >>> >>> 3. Ein guter Compiler entfernt das ganze Konstrukt. >> >> Quatsch > > Warum sollte das Quatsch sein? gcc tut das, und das ist gut
1 | if(CompilerOptimierung == 0) |
2 | {
|
3 | KonstruktInMaschinenCodeUebernehmenAberUeberspringen(); |
4 | }
|
5 | else
|
6 | {
|
7 | KonstruktEntfernen(); |
8 | }
|
Gruß
In C macht man sowas besser mit #if 0 // dead code #endif In Java wuerde man sowas z.B. gar nicht schreiben koennen, da der Compiler keinen toten Code erlaubt -- was ja auch nicht ganz sinnlos ist.
Stefan Zimmermann schrieb: > CompilerOptimierung == 0 Stefan Zimmermann schrieb: > Rolf Magnus schrieb: >> Karlson vom Dach schrieb: >>>> >>>> 3. Ein guter Compiler entfernt das ganze Konstrukt. >>> >>> Quatsch >> >> Warum sollte das Quatsch sein? gcc tut das, und das ist gut > if(CompilerOptimierung == 0) > { > KonstruktInMaschinenCodeUebernehmenAberUeberspringen(); > } > else > { > KonstruktEntfernen(); > } Wobei das Ausschalten von Optimierungen wohl eher für Leute ist die ihre eigenen Bugs nicht finden und hoffen das der Compiler es versaut hat. In der Regel wird die Qualität eines Compilers ja an den Optimierungen und Libs(z.b. für Gleitkommaberechnungen) gemessen und kein Mensch schaltet Optimierungen aus. Warum sollte man sonst so viel Kohle für z.b. IAR EWB ausgeben wenn gcc ohne Optimierungen auch alles "richtig" übersetzt.
Michael G. schrieb: > In C macht man sowas besser mit > > #if 0 > // dead code > #endif > > In Java wuerde man sowas z.B. gar nicht schreiben koennen, da der > Compiler keinen toten Code erlaubt -- was ja auch nicht ganz sinnlos > ist. Eben, und sinnlos ist auch das Auskommentieren von Code. Wenn er weg soll, dann wird er gelöscht. Und da man sowieso nicht ohne eine ordentliche Versionsverwaltung entwickelt, geht auch kein Code verloren. Aber große Blöcke von auskommentierten Code sind schlecht für die Qualität und Wartbarkeit des gesamten Quellcodes. Auskommentierter Code wird nicht von Tests behandelt, wer wird nicht weiter entwickelt, er wird bei refactorings übergangen usw. gruß cyblord
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.