Unterschied zwischen xxx.h und cxxx



  • Bisher includiere ich immer die *.h Files. Was ist der Unterschied zwischen zB

    #include <math.h>
    #include <cmath>
    


  • Schau doch mal rein, in die Dateien 😉


  • Mod

    Das cmath ist C++, das math.h ist C (und in C++ aus Abwärtskompatibilität auch dabei).

    Benutze wenn möglich die C++ Header. Zwar bietet C99 in der math.h viele Funktionen die im C++98-Standard nicht enthalten sind, dafür bindet cmath aber üblicherweise einfach math.h ein (und damit auch diese neuen Funktionen). Dabei wird aber alles in den namespace std verfrachtet. Und die C++-Header bieten einige nützliche Überladungen (z.B. von pow) die es in C natürlich nicht gibt (weil C keine Überladungen kennt).



  • Vc++2010 verfrachtet explizit per using die Symbole in den std namespace. Weiß jetzt nicht, ob da auch die C99-Funktionen eingeschlossen werden, aber es ist auf jeden fall nicht namespace std { #include <math.h> }.


  • Mod

    Decimad schrieb:

    Vc++2010 verfrachtet explizit per using die Symbole in den std namespace. Weiß jetzt nicht, ob da auch die C99-Funktionen eingeschlossen werden, aber es ist auf jeden fall nicht namespace std { #include <math.h> }.

    Ja, ich sehe auch gerade, dass beim GCC die C99-Funktionen im globalen Namensraum landen. Schon ein bisschen komisch. Aber sie sind jedenfalls da.

    Verlassen kann man sich laut C++-Standard natürlich nicht darauf. Aber nach Standard wären diese Funktionen auch gar nicht da und der Header math.h ist "deprecated" (lies: veraltet und wird eventuell in Zukunft nicht mehr unterstützt).



  • aufpassen solltest du bei strings

    gibt hier nämlich 3 dateien:
    - string.h operationen und funktionen für die "alten" C-Style Strings
    - cstring das gleiche wie bisher beschrieben, nämlich der string.h header in c++ eingebettet
    - string die std::string klasse mit seinen internen operationen...



  • Habe mir daher auch mal die Chromium Sources angesehen. Die Entwickler verwenden - soweit ich das sehen konnte - vorwiegend oder ausschliesslich die C-Variante, also <math.h>, <stdlib.h>, usw. Obwohl das Projekt ziemlich konsequent in C++ entwickelt wird.


Anmelden zum Antworten