static int?



  • Bouncer schrieb:

    CStoll schrieb:

    Nein, wenn die betroffene Funktion gar nicht aufgerufen wird, werden die statischen Variablen auch nicht initialisiert.

    wenn die funktion niemals aufgerufen oder sonst nie referenziert wird (z.b. über function pointer), dann steckt sie erst gar nicht erst im binary (kannste z.b. mit 'nem linker-map file nachprüfen) und statische/globale variablen ebenfalls nicht (mit ausnahme von 'volatiles'). ansonsten werden globale und statische variablen noch *vor* dem aufruf von 'main' initialisiert. jedenfalls kenne ich keinen compiler, der's tatsächlich erst *beim* ersten zugriff macht.

    Es ist ja nicht immer so, daß eine Funktion nie aufgerufen wird. Aber es kann durchaus vorkommen, daß sie bei einem bestimmten Programmlauf nicht aufgerufen wird - und dann steht sie trotzdem im Binary.

    CStoll schrieb:

    ...aber in C++ macht sich der Unterschied deutlicher bemerkbar

    na, das kann schon sein. warum auch immer.
    🙂

    In C++ kannst du zumindest besser verfolgen, wann ein gegebenes Objekt initialisiert wird - also fällt da der Unterschied schon auf. Und zumindest aus C++ weiß ich, daß statische Variablen beim ersten Aufruf ihrer Funktion initialisiert werden.

    (btw, der Initialierungswert einer Variable kann erst zur Laufzeit festgelegt werden - wie willst du sie da schon bei Programmstart befüllen?)



  • CStoll schrieb:

    (btw, der Initialierungswert einer Variable kann erst zur Laufzeit festgelegt werden - wie willst du sie da schon bei Programmstart befüllen?)

    nur bei nicht-statischen variablen, static und globale variablen dürfen nur mit konstanten initialisiert werden.

    void f (void)
    {
       int a = g();  // ok, a ist nicht static
       static int b = g(); // error, rückgabewerte von funktionen sind nicht konstant
       ... 
    }
    

    🙂



  • Also das erstaunt mich jetzt aber - wo man doch in C sogar die Größe eines Arrays zur Laufzeit bestimmen kann.

    PS: Aber ich bleib doch lieber bei C++.



  • CStoll schrieb:

    Also das erstaunt mich jetzt aber - wo man doch in C sogar die Größe eines Arrays zur Laufzeit bestimmen kann.

    Eines Arrays auf dem Stack. Hier geht es um static.



  • CStoll schrieb:

    Also das erstaunt mich jetzt aber - wo man doch in C sogar die Größe eines Arrays zur Laufzeit bestimmen kann.

    auch nicht im global scope. (edit: steht ja schon da)

    CStoll schrieb:

    PS: Aber ich bleib doch lieber bei C++.

    mach doch :p in C++ sind ja alle erdenklichen schweinereien möglich.
    🙂



  • Bouncer schrieb:

    in C++ sind ja alle erdenklichen schweinereien möglich.
    🙂

    In C auch - und im Gegensatz zu C können wir diese "Schweinereien" sogar vor den Anwendern verbergen.



  • CStoll schrieb:

    Bouncer schrieb:

    in C++ sind ja alle erdenklichen schweinereien möglich.
    🙂

    In C auch - und im Gegensatz zu C können wir diese "Schweinereien" sogar vor den Anwendern verbergen.

    ja, aber in C kann man irgendwelche schweinereien nur mit wirkilch böser absicht machen - und - man kann sie nicht vererben 😉



  • Soll ich mit-oder zumachen?



  • Tim schrieb:

    ...oder zumachen?

    was missfällt dir? ist doch alles chillig hier...
    🙂



  • Ich lese zuviel "C vs C++".



  • Tim schrieb:

    Ich lese zuviel "C vs C++".

    du musst zugeben, dass ich fast nie damit anfange. allerdings würde ich es schon verstehen, wenn du mir vorwirfst, dass ich zu oft drauf einsteige.
    🙂



  • Tim schrieb:

    Soll ich mit-oder zumachen?

    meiner Meinung nach zumachen. Wir haben fast einmal in der Woche ein C vs C++ Thread. Und die ganze Disskusion hier hat mit dem ursprünglichen Thema nichts mehr zu tun.



  • Tim schrieb:

    Soll ich mit-oder zumachen?

    Von Kollege zu Kollege - zumachen 😃
    Aus Sicht eines Diskussionsteilnehmers - du bist hier der Mod

    @vista: Müll kannst du in deine C-Programme schneller einbauen als du denkst - und der hält sich dann hartnäckig.


Anmelden zum Antworten