Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » initialisieren und boolean...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
05.08.2003, 20:31 Uhr
kronos
Quotenfisch
(Operator)


hi!
ich habe eine funktion, die mehrmals aufgerufen wird, aber bestimmter code soll nur beim ersten aufruf ausgeführt werden. dazu habe ich nachdem ich es selbst vergeblich versucht habe folgendes gefunden:

C++:
static Init = FALSE;
    if(Init==FALSE)  
    {                    
        code; //nur beim start ausführen
        Init = TRUE;  
    }
code; // jedesmal ausführen


bei mir klappt das natürlich nicht : (
ertens, mein compiler (gcc) kennt kein TRUE/FALSE und schon gar kein bool. (und ich dachte das wäre ein elementarer type!!)
zweitens, mit 'nem int klappt das auch nicht, es wird jedemal der gesamte code ausgeführt. ist ja auch logisch, da Init ja zu beginn immer als FALSE definiert wird... ,bitte!

p.s.: wo habt ihr die ganzen genialen smilies her???
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.08.2003, 20:41 Uhr
Pablo
Supertux
(Operator)


TRUE bzw. FALSE sind in C und C++ nicht 0 bzw 0. Ich glaube, bin aber nicht ganz sicher, es gibt in schon true und false aber alles klein geschrieben. Du könntest folgendes machen:


C++:
void function()
{
    int static Init = 0; // äquivalent zu false
    if (!Init)
    {
        // einmaliger Code
        Init = 1; // äquivalent zu true
    }

// Code
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.08.2003 um 20:44 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.08.2003, 20:51 Uhr
Pablo
Supertux
(Operator)



Zitat:
kronos postete

zweitens, mit 'nem int klappt das auch nicht, es wird jedemal der gesamte code ausgeführt. ist ja auch logisch, da Init ja zu beginn immer als FALSE definiert wird... ,bitte!



Stimmt nicht, ich hab dieses kleines Programm, welches folgende Ausgabe hat:

Diese Zeile erscheint nur einmal
f() wird ausgeführt.
f() wird ausgeführt.
f() wird ausgeführt.



C++:
#include<stdio.h>

void f()
{
    int static Init = 0; // äquivalent zu false
    if (!Init)
    {
        // einmaliger Code
        printf("Diese Zeile erscheint nur einmal\n");
        Init = 1; // äquivalent zu true
    }
    printf("f() wird ausgeführt.\n");
}

int main()
{
    f();
    f();
    f();
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.08.2003 um 20:52 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.08.2003, 20:52 Uhr
kronos
Quotenfisch
(Operator)


das ging aber schnell!
sehe ich das richtig, dass bei die deklaration einer static variable, samt dranhängender definition (="implizite deklaration"?) übersprungen wird, wenn die variable schon existiert? sonst wäre Init ja immer 1 und der code würde jedesmal ausgeführt. und das ist leider bei mir auch der fall... : (

und gibt's in c tatsächlich kein boolean? ist doch so schön kultig und platzsparend...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.08.2003, 21:00 Uhr
kronos
Quotenfisch
(Operator)


ich korrigiere mich, es funktioniert...
oh mann, wisst ihr was das schlimme beim programmieren ist? es ist ist nie irgendjemand anders schuld als man selbst. der olle compiler macht nie 'nen fehler. so langsam hass' ich ihn richtig dafür... ich glaube ich hol' mir mal irgend'ne unausgereifte beta-version, damit's nicht JEDESMAL an mir liegt.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.08.2003, 21:01 Uhr
Pablo
Supertux
(Operator)


Eine static Variable darf auch bei der Deklaration initialisiert werden.
Wenn eine Funktion beendet wird, dann verlassen alle Variablen ihren Gültigkeitsbereich und wenn die Funktion wieder aufgerufen wird, dann werden sie wieder initialisiert. Eine static Variable ist eine Variable, die den "Gültigkeitsbereich" nie verlässt, d.h. wenn du Funktion aufgerufen wird, behält sie ihren alten Wert.

Nein, icn C gibt es bool nicht, weil man alles mit ints machen kann. bool ist nicht anders als true=1 und false=0. true darf auch eine andere Zahl sein, aber nicht 0.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.08.2003, 21:02 Uhr
Pablo
Supertux
(Operator)



Zitat:
kronos postete
ich korrigiere mich, es funktioniert...
oh mann, wisst ihr was das schlimme beim programmieren ist? es ist ist nie irgendjemand anders schuld als man selbst. der olle compiler macht nie 'nen fehler. so langsam hass' ich ihn richtig dafür... ich glaube ich hol' mir mal irgend'ne unausgereifte beta-version, damit's nicht JEDESMAL an mir liegt.


Ich fand das ziemlich lustig, aber wieso willst du, dass der Compilier keine Fehler macht oder war das nur ?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.08.2003 um 21:44 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.08.2003, 21:34 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
Pablo Yanez Trujillo postete
[i]Eine static Variable darf auch bei der Deklaration initialisiert werden.
Wenn eine Funktion beendet wird, dann verlassen alle Variablen ihren Gültigkeitsbereich und wenn die Funktion wieder aufgerufen wird, dann werden sie wieder initialisiert. Eine static Variable ist eine Variable, die den "Gültigkeitsbereich" nie verlässt, d.h. wenn du Funktion aufgerufen wird, behält sie ihren alten Wert.

ich hab' mich bloß gewundert, dass nach "int static init =0" das "if (!init)" nicht immer wahr wird. aber das muss natürlich so sein, sonst hätte man von static ja recht wenig... :/


Zitat:
Ich fand das ziemlich lustig, aber wieso willst du, dass der Compilier keine Fehler macht oder war das nur :ironie

nee, war nicht ganz ernst gemeint. ich mache halt unmengen von denk- und leichtsinnsfehlern und manchmal starre ich eine halbe stunde lang meinen fehlerhaften code an und denke, "das kann doch jetzt nicht sein!". und dann reg' ich mich über mich selbst auf, wenn ich endlich 'rausgefunden hab', dass ich mal wieder irgendein vorzeichen vermurkst hab'. wenn aber der compiler buggy wär', könnt' ich mich zur abwechlung mal über den aufregen.

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.08.2003, 21:44 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Seit C99 kennt C einen boolschen Typ: #include <stdbool.h>
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 05.08.2003 um 21:44 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.08.2003, 21:45 Uhr
Pablo
Supertux
(Operator)


Weiß nicht, aber ich arbeite lieber mit int als mit bool, ich mag mehr C-Stil als C++ Stil
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 05.08.2003 um 21:45 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: