matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++if(0)
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
Forum "C/C++" - if(0)
if(0) < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

if(0): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 07:16 So 11.07.2010
Autor: max_e

hallo,

wenn ich die anweisung

int i=0; if(i=0) cout<<i++;

habe, dann gibt der compiler mir keinen wert zurück, dh. auch keine Null
an was liegt es?

ich meine es steht doch dann im if argument folgender ansatz:

if(0) cout<<i++;

wieso bearbeitet der compiler den ausgabebereich nicht, in seiner anweisung steht zwar eine null, aber es ist doch kein bool!!

danke max

        
Bezug
if(0): Zuweisung
Status: (Antwort) fertig Status 
Datum: 09:05 So 11.07.2010
Autor: Infinit

Hallo max,
die Programmierzeiten sind bei mir schon lange her, aber wenn ich mich nicht irre, wird mit
if (i=0)
eine Zuweisung vorgenommen, die logische Abfrage schreibt man als
if (i==0).
Könnte es daran liegen, dass der Compiler nichts rausgibt?
Viele Grüße,
Infinit

Bezug
                
Bezug
if(0): Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 09:14 So 11.07.2010
Autor: max_e

hallo infinit,


Ja es handelt sich um eine Zuweisung if(i=0)

Jedoch
wenn ich (habs schon probiert) schreibe
if(1)....-> läuft der Compiler in die Anweisung rein
if(0)....-> der Compiler lässt die Anweisung liegen

also unterscheidet der Compiler in der if anweisung zwischen 0 und allen anderen zahlen, kann es etwa sein das der compiler einen impliziten cast insgeheim durchführt, praktisch die integer variable in ein bool transformiert und dann die ausführung macht...??



Bezug
                        
Bezug
if(0): Umwandlung
Status: (Antwort) fertig Status 
Datum: 09:32 So 11.07.2010
Autor: Infinit

Hallo max,
so wie Du das Verhalten des Compilers beschreibst, habe ich auch das Gefühl, dass hier eine Typumwandlung durchgeführt wird.
Mehr kann ich aber jetzt auch nicht dazu sagen.
Viele Grüße,
Infinit

Bezug
                        
Bezug
if(0): Komplizierter...
Status: (Antwort) fertig Status 
Datum: 10:58 So 11.07.2010
Autor: Event_Horizon

Hallo!

Die Sache ist etwas komplizierter.

Erstmal zum Begriff: Der Compiler ist eigentlich nur ein Programm, der aus deinem Quellcode ein ausführbares Programm macht, er selbst hat mit dem Laufen des Programms dann wenig zu tun.

Der Compiler ist ziemlich intelligent und interpretiert den Code schon so weit wie möglich und ersetzt a=1+2+3+4+5 direkt durch a=15, ebenso erkennt er, daß ein if(1) IMMER gültig ist, und streicht das IF und einen evtl vorhandenen, ELSE-Block, der ja eh nie aufgerufen wird. Allerdings versucht er damit nur, das Programm schneller zu machen, das ist für dich normalerweise belanglos.

Das mit dem internen Cast ist auch nicht ganz korrekt. Letztendlich überprüft ein IF, ob sein Argument "nicht 0" ist.

Ich kann nun nicht genau sagen, wie der =-Operator in C implementiert ist, da er fest eingebaut ist. Aber vielleicht hilft ein Blick in überladene Operatoren in C++ . Da kann man ja eigene Klassen definieren, und auch festlegen, was das = da bedeuten soll.

Ich will da jetzt nicht weiter einsteigen, sondern nur ganz einfach sagen, wie das anscheinend funktioniert: Das = arbeitet intern mit Referenzen, man könnte jetzt platt sagen, das sind Adressen im Arbeitsspeicher mit der Info, was für ein Datentyp dort zu finden ist.

a=b; holt sich den Wert von der Adresse, an der b liegt, schaut, wie man den Typ von b in den Typ von a umwandelt, und schreibt den so ermittelten Wert an die Adresse, an der a liegt.
a=5; ist da nicht viel anders, denn diese 5 muß ja auch irgendwo im Speicher stehen. (Na gut, der Compiler macht das was anders, aber egal.)

Und jetzt der Knackpunkt:
Dabei wird jedesmal eine Referenz auf a zurück gegeben. Denn so ist es technisch am einfachsten, sowas wie

a=b=c=d=5; zu realisieren.
Das d wird automatisch mit der Adresse versorgt, an der der Wert 5 steht, und gibt seine eigene Adresse an das c= weiter. Das kopiert sich den Inhalt der Speicheradresse von d rüber, und gibt seine Adresse an das b= weiter...

Dein IF bekommt also bei if(a=0) nicht den Wert 0, sondern eine Referenz/Speicheradresse zu a geliefert, und da a vorher deklariert wurde, existiert diese Adresse, und die ist garantiert niemals 0, und daher wird das IF garantiert immer "aktiv" sein.

Bezug
                                
Bezug
if(0): Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:03 So 11.07.2010
Autor: max_e

hallo,

erstmal vielen dank für die genau erläuterungen,

ok -->

Punkt1.)

if(i=0) cout<<i++;
cout<<i;

der Code wird so eingegeben, jedoch bekomme ich in der ausgabe nichts zurück, ich müsste doch eine 0 zurückbekommen.

hingegen wenn ich so schreib

if(i=2) cout<<i++;
cout<<i;

dann bekomme ich eine 2,
und dann eine 3
--> ok macht Sinn

------> wenn nun i mit der 0 belegt ist, dann hat die variable schließlich einen wert, wenn nun meine if-anweisung erkennt bzw. akzeptiert das i mit 0 belegt ist, muss doch die ausführung durchgeführt werden cout....
aber es passiert nichts..


danke max

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]