static oder eben nicht?



  • @1: Ja, mit static verpasst du Funktionen und globalen Variablen interne Linkage - die sind dann nur in der aktuellen Übersetzungseinheit gültig.

    @2: new existiert nur in C++ (und so, wie du's verwendet hast, gar nicht). In C ist es übliche, solche "kleinen" Variablen auf den (edit:) Stack zu legen:

    timesS calc(...) {
      // Berechnung
      timesS myTimes = {1,2,3,4,5,6,7};
      ...
      return myTimes;
    }
    


  • CStoll schrieb:

    @2: new existiert nur in C++ (und so, wie du's verwendet hast, gar nicht).

    'new' existiert auch in Java. nicht umsonst heisst der OP Java-Progger...

    CStoll schrieb:

    In C ist es übliche, solche "kleinen" Variablen auf den Heap zu legen:

    das stimmt doch gar nicht 😞



  • vista schrieb:

    CStoll schrieb:

    @2: new existiert nur in C++ (und so, wie du's verwendet hast, gar nicht).

    'new' existiert auch in Java. nicht umsonst heisst der OP Java-Progger...

    OK, überzeugt - aber auf jeden Fall existiert es NICHT in C (und nebenbei ist das kein Java-Forum, sondern ein C/C++ Forum ;))

    CStoll schrieb:

    In C ist es übliche, solche "kleinen" Variablen auf den Heap zu legen:

    das stimmt doch gar nicht 😞

    Args, was erzähle ich denn da? Ich meinte natürlich "auf den Stack".



  • Java-Progger schrieb:

    wie bekomme ich es hin, daß meine, in einem C-File vorhandenen,
    Variablen auf das C-File beschränkt bleiben? Das also der Linker
    diese nicht mit Variablen aus anderen C-Files verwirbelt?
    [...]
    Ich programmiere seit Jahren nur noch Java und weiß jetzt
    nicht mehr, ob es auf diese Art Speicherprobleme geben kann

    CStoll schrieb:

    nebenbei ist das kein Java-Forum, sondern ein C/C++ Forum

    🙄



  • vista schrieb:

    🙄

    Forumstitel schrieb:

    C/C++ Forum :: ANSI C :: static oder eben nicht?

    Es gibt new nicht nur in C++, sondern unter anderem auch in Java. Aber es ist kein Bestandteil von ANSI C, also ist der Hinweis von CStoll absolut korrekt.



  • pock schrieb:

    ...also ist der Hinweis von CStoll absolut korrekt.

    an der korrektheit zweifele ich auch nicht...



  • Erst mal ein Dankeschön an alle.

    Aber:

    CStoll schrieb:

    timesS calc(...) {
      // Berechnung
      timesS myTimes = {1,2,3,4,5,6,7};
      ...
      return myTimes;
    }
    

    Ist das denn korrekt? Meine noch vorhandenen,
    C-relevanten, Neuronen-Verbindungen lassen mich
    vermuten, daß sich hier Speicherprobleme ergeben
    können.

    Wenn ich es (noch) richtig verstehe, wird doch
    eine Struktur auf dem Stack angelegt. Und wenn
    diese Struktur an den Aufrufer zurückgegeben wird,
    ist der Stack doch wieder freigegeben; zumindest
    wird er bei Aufruf einer anderen Funktion eventuell
    wieder überschrieben, sodaß die Werte (1,2,3,...)
    möglicherweise nicht mehr bestehen?

    Sehe ich das jetzt richtig, oder bringe ich da
    was vollkommen durcheinander? 😮 😕



  • Kein Problem, du musst nur den Rückgabewert einer entsprechenden Strukturvariable zuweisen.

    timesS foo;
    
    foo = calc(...);
    


  • Werden die Werte der Struktur denn bei Rückgabe
    automatisch kopiert? 😕

    In diesem Fall wäre dann das, was ich meinte wohl:

    timesS* calc(...) { 
      // Berechnung 
      timesS myTimes = {1,2,3,4,5,6,7}; 
      ... 
      return &myTimes; 
    }
    

    Nur das ist dann fehlerhaft? Richtig?



  • Jup, das wäre so dann schrott.



  • OK! Dann habe ich es wohl (wieder) verstanden. 🙂
    👍


Anmelden zum Antworten