Was bewirkt in C folgender Befehl

Gast #2589235
Lesenswert?

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
Gast #2589264
Lesenswert?

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.
Gast #2589271
Lesenswert?

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.
Gast #2589290
Lesenswert?

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.
Gast #2589293
Lesenswert?

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.
Gast #2589309
Lesenswert?

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. Dafr 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]
Gast #2589313
Lesenswert?

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.
Gast #2589335
Lesenswert?

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.
Gast #2589700
Lesenswert?

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ß
#2591068
Lesenswert?

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.
#2591134
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren