Anfänger ?
-
Dann lass den dummen Satz halt weg, und geb mir sonst eine Antwort. Und dass man in eine Situation kommen kann wo man alle geöffneten Dateien schliessen muss das bezweifelt Ihr wahrscheinlich nicht. Ob ich jetzt nur eine schliessen muss oder zehn. Bei _FCLOSEALL() habt Ihr mir einen rekursiven Weg gezeigt, preprocess, bei mir geht das iterativ den schreibe ich nicht mehr um. Dann liegen die File-Pointer eben in einem Stack, und soll sie alle schliessen ( Wenn das Programm auf einen Syntaxfehler stösst ) Den Stack durchlaufen und sie einzeln schliessen,ist das gleiche wie _fcloseall().
-
Es geht momentan nur darum, ob man _fcloseall() verwenden soll oder nicht. Wenn ich eine member die die Dateien schliesst schreibe, dann nenne ich sie eben _fcloseall2(). Und was den dummen Satz angeht, wenn ich ein Programm schreibe, dann muss ich es testen, sehr oft. Wenn Microsoft _fcloseall() eingeführt hat, dann musste Microsoft dieses testen. Und wenn die Tests erfolgreich verlaufen sind, dann gilt es als brauchbar. Und wenn es nur darum geht, ob _fcloseall() keine Probleme macht dann sind mehrere Tests von nutzen.
-
@biter sagte in Anfänger ?:
Es geht momentan nur darum, ob man _fcloseall() verwenden soll oder nicht.
Verwende sie, wenn sie in deinem Fall nützlich ist. Wäre _fcloseall() totaler Unsinn, würde es die Funktion gar nicht geben.
-
@RBS2 Blödes Argument!
In dem fcloseall-Fall kann ich das nicht beurteilen, aber generell kann man sich so natürlich jeden noch so schlechten Code schön reden.
-
mal sehen, wie lange es dauert, bis das hier alles an den _fcloseall-thread angehängt wird.
-
@biter @RBS2
für mich klingt euer Programmierstil so ein bisschen nach:"Ich hab keine Ahnung ob mein Prozess noch irgendwelche Filehandles hat und wo die sind und überhaupt, also nehm ich die große Dampframme und lasse einfach das Betriebssystem die Scheiße aufräumen, die ich durch meine Sturheit und Beratungsresistenz verzapft habe"
-
@Jockelx sagte in Anfänger ?:
@RBS2 Blödes Argument!
In dem fcloseall-Fall kann ich das nicht beurteilen, aber generell kann man sich so natürlich jeden noch so schlechten Code schön reden.Schlecher Code ist für mich zum Beispiel, alle FILE* in einer Schleife zu schließen, anstatt ein Mal fcloseall() aufzurufen.
-
@It0101 sagte in Anfänger ?:
Ich hab keine Ahnung ob mein Prozess noch irgendwelche Filehandles hat und wo die sind und überhaupt, also nehm ich die große Dampframme und lasse einfach das Betriebssystem die Scheiße aufräumen, ...
Das ist ja das Tolle, wenn man ein OS hat, das sowas kann.
-
@RBS2 sagte in Anfänger ?:
@It0101 sagte in Anfänger ?:
Ich hab keine Ahnung ob mein Prozess noch irgendwelche Filehandles hat und wo die sind und überhaupt, also nehm ich die große Dampframme und lasse einfach das Betriebssystem die Scheiße aufräumen, ...
Das ist ja das Tolle, wenn man ein OS hat, das sowas kann.
Früher oder später geht das schief. Dann baust du noch ein zusätzliches Modul, welches auch ein Filehandle unterhält, denkst aber nicht mehr an deine Dampframme und killst auch noch das Filehandle in dem neuen Modul. Und dann brennt der gbd und deine Birne gleich mit.
Aber wie gesagt: wenn ihr scheiße bauen wollt, dann kann euch niemand aufhalten, aber heult dann nicht rum, wenn in eurem Datensatz das Anfänger-Bit gesetzt ist.
-
@It0101 sagte in Anfänger ?:
Aber wie gesagt: wenn ihr scheiße bauen wollt, dann kann euch niemand aufhalten
Das will keiner. Ich sehe bei fcloseall() nur das Problem, dass es global auf den ganzen Prozess wirkt. Wie du schon sagtest, ist fcloseall() nicht so gut, wenn irgendwelche Komponenten noch FILE* haben, von denen man nichts weiß. Aber z.B. in einem Programm, das quasi-simultan (per kooperatives Multitasking) viele Dateien beschreibt, kannst du mit einem einzigen Funktionsaufruf alle Schreib-Buffer flushen und die Dateien schließen. Sehr praktisch, vor allem wenn die Anzahl der Dateien variabel ist.
-
@RBS2
Klar. Und wenn du in der Küche das Licht ausmachen willst, dann gehst du auch zum FI im Sicherungskasten und reißt den raus.
-
@It0101 sagte in Anfänger ?:
Klar. Und wenn du in der Küche das Licht ausmachen willst, dann gehst du auch zum FI im Sicherungskasten und reißt den raus.
Ein sehr unpassender vergleich, aber auch das mag manchmal die beste Lösung sein. Zum Beispiel wenn man den Wohnungsschlüssel verloren hat, eine Pizza im Ofen bruzzelt und der Sicherungskasten im Hausflur ist, wo man sich gerade befindet.
-
das würde aber gar nicht funktionieren, weil der ofen gar nicht über den fi abgesichert wird.
-
@Wade1234 sagte in Anfänger ?:
das würde aber gar nicht funktionieren, weil der ofen gar nicht über den fi abgesichert wird.
Dann nimmste den Hauptschalter daneben.
-
aber dann taut der gefrierschrank ab
-
@Wade1234 sagte in Anfänger ?:
mal sehen, wie lange es dauert, bis das hier alles an den _fcloseall-thread angehängt wird.
5 stunden? wow!
-
@biter sagte in Anfänger ?:
Es geht momentan nur darum, ob man _fcloseall() verwenden soll oder nicht.
Alle Bezeichner mit einem oder zwei "_" sind proprietäre Internas des Compilers, und man sollte sie in der Regel gar nicht nutzen. Ausnahmen bestätigen auch hier die Regel. Mir erscheint das so zu sein, dass hier eine interne Schnittstelle der Laufzeitumgebung genutzt wird. Das ist zwar technisch möglich, aber nicht unbedingt die sauberste Art und Weise vorzugehen. Wenn man auf C Niveau Error Handling macht – sprich
exit(EXIT_ERROR)
aufruft, dann mag so etwas normal erscheinen.
-
Interessant, dass die beiden Threads mittlerweile sehr weit oben bei Google auftauchen (zumindest bei mir), wenn man fcloseall bzw. _fcloseall sucht.
Die Diskussion an sich ist aber völlig sinnlos...
-
@john-0 sagte in Anfänger ?:
Alle Bezeichner mit einem oder zwei "_" sind proprietäre Internas des Compilers, und man sollte sie in der Regel gar nicht nutzen. Ausnahmen bestätigen auch hier die Regel. Mir erscheint das so zu sein, dass hier eine interne Schnittstelle der Laufzeitumgebung genutzt wird. Das ist zwar technisch möglich, aber nicht unbedingt die sauberste Art und Weise vorzugehen.
Die Funktionen der ms-crt wurden umbenannt um nicht mit POSIX-Funktionen zu kollidieren, die zwar meist ein ähnliches, aber doch hin und wieder ein für POSIX-Gewöhnte überraschendes Verhalten haben. Es spricht nichts dagegen diese Funktionen (die, deren Verwendung nicht per se total Banane ist) zu verwenden wenn es nicht auf Platformunabhängigkeit ankommt. Ob die jetzt mit
_
beginnen oder nicht. Mit_
-Prefix ist eben sichergestellt, daß sie nicht mit anderen Bezeichnern kollidieren.@Mechanics sagte in Anfänger ?:
Interessant, dass die beiden Threads mittlerweile sehr weit oben bei Google auftauchen (zumindest bei mir), wenn man fcloseall bzw. _fcloseall sucht.
Die Diskussion an sich ist aber völlig sinnlos...Ka*** schwimmt doch immer oben? ^^
-
@Mechanics sagte in Anfänger ?:
Interessant, dass die beiden Threads mittlerweile sehr weit oben bei Google auftauchen (zumindest bei mir), wenn man fcloseall bzw. _fcloseall sucht.
Die Diskussion an sich ist aber völlig sinnlos...Lässt vermuten, dass sonst niemand wirklich über diese Befehle redet....