|
A C++ a kompatibilitás miatt jelentős részt megőrzött a C nyelvből: szintaxisát, kulcsszavakkal együtt, és a standard könyvtárát.
InkompatibilitásBár a C-t gyakran nevezik a C++ részhalmazának, ez csak részben igaz, meglehet a nyelv alkotója törekedett a maximális kompatibilitásra. A legtöbb C kód érvényes C++ kód is, de sokszor kell kisebb dolgokat átírni, mert nem fordulnának le, vagy más szemantikával bírnak. Lexikális eltérések
Szintaktikus hibákA problémák egy része a C++ erősebb típusellenőrzéséből fakad, ilyen például, hogy a void* nem konvertálódik automatikusan bármilyen T* mutatóvá. Ez a mallocot tartalmazó kódok nagy részét invalidálja, mivel az void*-t ad vissza. int* i = malloc(sizeof(int)*10); //érvényes C-kód, érvénytelen C++: implicit konverzió void*-ról int*-ra Ehelyett konverziós operátort kell használni: int* i = (int*)malloc(sizeof(int)*10); //így lefordul mindkét fordítóval Egy másik gyakori gond a C++ kibővített kulcsszókészlete, amelyet sok C programban azonosítóként használnak, s bár ez lexikális eltérés, mégis a parser ismersi fel. További eltérések még, amelyek fordítási hibát okozhatnak C-kód C++ fordítóval való fordítása során:
void f(a,x) char* x {} //ehelyett void f(int a, char* x){}
Szemantikai eltérésekEzek az eltérések nem okoznak fordítási hibát(többnyire), de a program máshogy fog működni, attól függően, hogy C vagy C++ kódként fordítjuk.
Egyéb eltérésekEzek az eltérések a C++-ban szereplő, de C kód fordításakor nem zavaró eltérések közül néhány.
Standard könyvtárA C++ kisebb módosításokkal(lásd feljebb) átvette a C standard könyvtárát, eredeti néven elérhetők az eredeti könyvtárak a globális névtérben, valamint .h kiterjesztés nélkül és egy 'c' bevezető névvel a fejállományok az std névtérbe helyezve szerepelnek. #include <stdio.h> //printf() #include <cstdio> //std::printf() |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net