Anfänger ?



  • @Swordfish sagte in Anfänger ?:

    Ne, wieso soll das für jede Bibliothek gelten, bei der es einem völlig frei steht, sie zu verwenden?

    Es geht um das grundsätzliche Problem von Namenskollisionen, und die explizite Definition der ISO Norm, dass nur Compiler- und Laufzeit-Internas in den Namensräumen _ bzw. __ existieren dürfen. Das wird durch normale Funktionen konterkariert. Ergo, wäre es besser gewesen sie nicht dort unterzubringen. Spezielle UNIX bzw. Linux Eigenheiten werden ja auch nicht in die privaten Namensräume der Compiler verschoben, sondern existieren explizit im normalen Namensraum. Weshalb weicht Microsoft so von der Gepflogenheiten der C Programmierung ab?



  • @john-0 sagte in Anfänger ?:

    Es geht um das grundsätzliche Problem von Namenskollisionen, und die explizite Definition der ISO Norm, dass nur Compiler- und Laufzeit-Internas in den Namensräumen _ bzw. __ existieren dürfen.

    Wer sagt das? Du darfst Bezeichner in Deinem Usercode nicht einführen. Wo ist irgendwo verboten, eine Funktion _foobar() aufzurufen?

    @john-0 sagte in Anfänger ?:

    Bezeichner mit einem _ am Anfang, denn solche Bezeichner sind laut Norm explizit für den Compiler und dessen Laufzeitumgebung reserviert.

    Du widersprichst Dir selbst. _fcloseall() ist bei MS Teil der Runtime.

    Ich sehe das genau andersrum: GNU packt irgendwelche Bezeichner ("This function is a GNU extension.") wie fcloseall() in einen Standardheader und kein Standard garantiert, daß der nicht auch von Usercode verwendet (=eingeführt) werden dürfte.

    @john-0 sagte in Anfänger ?:

    die explizite Definition der ISO Norm, dass nur Compiler- und Laufzeit-Internas in den Namensräumen _ bzw. __ existieren dürfen. Das wird durch normale Funktionen konterkariert. Ergo, wäre es besser gewesen sie nicht dort unterzubringen. Spezielle UNIX bzw. Linux Eigenheiten werden ja auch nicht in die privaten Namensräume der Compiler verschoben, sondern existieren explizit im normalen Namensraum.

    C++ (latest draf) [lex.name]/3.2:

    Each identifier that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

    C11 §7.1.3.1:

    [...]

    • All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.

    • All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.

    Also Du redest ein bisschen Topfen.


  • Banned

    @Wade1234 sagte in Anfänger ?:

    aber dann taut der gefrierschrank ab

    Bis dahin ist der Schlüsseldienst längst da und hat dein Schloß aufgeknackt. 🐱


  • Banned

    @Wade1234 sagte in Anfänger ?:

    was ich mich grad so frage: warum gibt es eigentlich keine funktion _fopenall()? das wäre doch bestimmt total bequem, alle dateien auf einmal öffnen zu können.😀

    Der würde eine Liste aus Pfaden bekommen und eine gleich lange Liste von FILE* zurückgeben, oder NULL, wenn eine der Dateien nicht geöffnet werden kann. Bestimmt gibt es auch den einen oder anderen Anwendungsfall dafür. Allerdings ist das schon sehr speziell.



  • @RBS2 sagte in Anfänger ?:

    Bis dahin ist der Schlüsseldienst längst da und hat dein Schloß aufgeknackt. 🐱

    ja da hast du natürlich recht. am sichersten ist es aber, im trafohäuschen die ganze straße abzuschalten.

    @RBS2 sagte in Anfänger ?:

    Der würde eine Liste aus Pfaden bekommen und eine gleich lange Liste von FILE* zurückgeben, oder NULL, wenn eine der Dateien nicht geöffnet werden kann. Bestimmt gibt es auch den einen oder anderen Anwendungsfall dafür. Allerdings ist das schon sehr speziell.

    naja wenn du gemäß obiger idee alle dateien mit 1 und 0 überschreiben willst, könnte das programm dann doch ungefähr so aussehen:

    int main()
    {
         int i;
    
         _fopenall("f:\\");
    
         for(i = 0; i < 5; i++)
         {
              _fwriteall(0xFFFFFFFF, 4, _fsizeall());
              _fwriteall(0x00000000, 4, _fsizeall());
         }
    
         _fcloseall();
    }
    

  • Mod

    @RBS2 sagte in Anfänger ?:

    @Wade1234 sagte in Anfänger ?:

    was ich mich grad so frage: warum gibt es eigentlich keine funktion _fopenall()? das wäre doch bestimmt total bequem, alle dateien auf einmal öffnen zu können.😀

    Der würde eine Liste aus Pfaden bekommen und eine gleich lange Liste von FILE* zurückgeben, oder NULL, wenn eine der Dateien nicht geöffnet werden kann. Bestimmt gibt es auch den einen oder anderen Anwendungsfall dafür. Allerdings ist das schon sehr speziell.

    Das wäre ja noch viel zu sinnvoll. Das hat ja ein richtiges Konzept vonwegen Ressourcenhandling. Das passende Äquivalent zu _fcloseall wäre, alle Dateien zu öffnen und die FILE* nicht zurück zu geben. Man kann die Dateien dann ja mit freadall, fwriteall, und fcloseall bearbeiten.


  • Banned

    @SeppJ sagte in Anfänger ?:

    @RBS2 sagte in Anfänger ?:

    @Wade1234 sagte in Anfänger ?:

    was ich mich grad so frage: warum gibt es eigentlich keine funktion _fopenall()? das wäre doch bestimmt total bequem, alle dateien auf einmal öffnen zu können.😀

    Der würde eine Liste aus Pfaden bekommen und eine gleich lange Liste von FILE* zurückgeben, oder NULL, wenn eine der Dateien nicht geöffnet werden kann. Bestimmt gibt es auch den einen oder anderen Anwendungsfall dafür. Allerdings ist das schon sehr speziell.

    Das wäre ja noch viel zu sinnvoll. Das hat ja ein richtiges Konzept vonwegen Ressourcenhandling. Das passende Äquivalent zu _fcloseall wäre, alle Dateien zu öffnen und die FILE* nicht zurück zu geben. Man kann die Dateien dann ja mit freadall, fwriteall, und fcloseall bearbeiten.

    So könnte die API für ein RAID-System aussehen. Mit erstaunen stelle ich fest, dass nicht alle User dieses Boards unkonventionellen Ideen ablehnend gegenüber stehen.



  • @RBS2 Woosh!

    . o O ( spätestens bei fseekall() wirds dann *wirklich* lustig )


  • Banned

    @Wade1234 sagte in Anfänger ?:

    was ich mich grad so frage: warum gibt es eigentlich keine funktion _fopenall()? das wäre doch bestimmt total bequem, alle dateien auf einmal öffnen zu können.😀

    Bei Windows gibt es das. Zumindest für einzelne Laufwerke.

    To open a physical hard drive for direct disk access (raw I/O) in a Win32-based application, use a device name of the form
    \.\PhysicalDriveN
    where N is 0, 1, 2, and so forth, representing each of the physical drives in the system.

    https://support.microsoft.com/en-us/help/100027/info-direct-drive-access-under-win32



  • der springende punkt ist einfach, dass dieses fcloseall dann auch alle internen dateihandles ungültig machen muss, was _fcloseall nicht tut, weshalb du im falle eines programmfehlers (verwendung von ungültigem dateideskriptor) keine fehlermeldung bekommst.

    Bei Windows gibt es das. Zumindest für einzelne Laufwerke.

    damit hast du direkten zugriff auf das laufwerk. so ähnlich wie open("/dev/sda", ...);


Log in to reply