Sinn von cmath, ctime, etc...
-
Kann mir jemand den Sinn von Includedateien wie "cmath" oder "ctime" erklären?
In denen wird doch nur "math.h" bzw. "time.h" inkludiert, warum soll man dann nicht gleich die verwendenOder ist das nur beim VS 6 so?
-
Weil die math.h und time.h C ist. Deshalb sollte man die Dinger als C++-Programmierer eigentlich gar nicht verwenden. Wenn man es aber doch tut, sollte man die c(math|time|...)-Header verwenden, da sie die Funktionen und Strukturen in dem Namensraum std definieren und dadurch der globale Namensraum "sauber" bleibt.
Und das ist nicht nur bei VS 6 (?) so, sondern bei jedem Compiler, der sich für standardkonform hält.
-
-predator- schrieb:
Kann mir jemand den Sinn von Includedateien wie "cmath" oder "ctime" erklären?
In denen wird doch nur "math.h" bzw. "time.h" inkludiert, warum soll man dann nicht gleich die verwendenOder ist das nur beim VS 6 so?
damit die funktionen im namespace std sind und manchmal auch um makros zu bändigen.
-
Also bei mir sind die Funktionen trotzdem nicht im namespace std
Folgender Code funktioniert:#include <cmath> #include <iostream> int main() { int i = log(100); // int i = std::log(100); funktioniert nicht std::cout << i; return 0; }
So sieht meine cmath aus:
// cmath standard header #if _MSC_VER > 1000 #pragma once #endif #ifndef _CMATH_ #define _CMATH_ #ifdef _STD_USING #undef _STD_USING #include <math.h> #define _STD_USING #else #include <math.h> #endif /* _STD_USING */ #endif /* _CMATH_ */ /* * Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. */
-
Weil MSVC 6.0 sich nicht an den (zu seine Entwicklungszeit noch gar nicht veröffentlichten Standard) hält. Es sei denn du machst #define _STD_USING bevor du die Header includierst.
MfG SideWinder
-
OK, danke.
Werd wahrscheinlich sowieso bald auf ne neuere Version umsteigen
-
-predator- schrieb:
Also bei mir sind die Funktionen trotzdem nicht im namespace std
Wobei die C Funktionen unter C++ sowohl im globalen als auch im std Namensraum verfügbar sind.
Die Verwendung der <c...> Header hat aber nicht nur zur Folge, dass die Funktionen im std Namensraum liegen. Da ist noch mehr. ZB kennt man ja von C, dass es für verschiedene Typen auch verschiedene Funktionen gibt. Mit sinf, sin, sinl bekommt man zB den Sinus für float, double, long double Werte. Unter C++ gibt es nur noch sin, was jeweils für float, double, long double überladen ist.