005
28.05.2008, 18:56 Uhr
0xdeadbeef
Gott (Operator)
|
C ist C, C++ ist C++. Die alten C-Funktionen fügen sich nicht gut in die umgebende Sprache ein. Am offensichtlichsten ist das bei den String-Funktionen - in C++ benutzt man da nicht mehr char* - aber auch sonst muss man beim Mischen der beiden Bibliotheken immer die Augen offenhalten. Wenn man new mit malloc und delete mit free mischt, kann man schon mal mit Code aufwachen, der mit einem Compiler funktioniert und dir mit dem nächsten um die Ohren fliegt. Im Fall von getchar muss man ggf. aufpassen, wie welche Streams woran getied sind (vgl. std::ios_base::sync_with_stdio).
Das Vermischen der beiden Bibliotheken (wie so häufig mit Legacy-Funktionalität) bringt einen Haufen Probleme mit sich, die man sich nicht einhandeln muss, weil die C++-Standardbibliothek die gleiche Funktionalität schon mitbringt.
Was Randy's Post angeht, die alten .h-Header sind im Standard in Anhang D (deprecated) vermerkt, was heißt, sie können in einem zukünftigen Standard entfernt werden. Wenn du tatsächlich Funktionen aus der C-Bibliothek benutzen musst (z.B. für Zufallszahlen, wenn du nicht boost.random benutzen willst), binde statt <stdlib.h> <cstdlib>, statt <time.h> <ctime> etc. ein. Dann sind die Symbole auch im std-Namespace. Zum Beispiel
C++: |
#include <cstdlib> #include <ctime> #include <iostream>
int main() { std::srand(std::time(0));
std::cout << std::rand() << std::endl; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 28.05.2008 um 19:01 Uhr von 0xdeadbeef editiert. |