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

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