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 kannCStoll 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.