Vraag & Antwoord

Programmeren

C++: <iostream> vs. <cstdio>

3 antwoorden
  • Hallo! Vraag over <iostream> en <cstdio>/<stdio.h>. Ik gebruik mingW/g++ als compiler. Als ik onderstaande C++-code compileer, [code:1:13933169b2] #include <iostream> int main ( int argc, char **argv ) { std::cout << "Hallo wereld!" << std::endl; return 0; } [/code:1:13933169b2] dan resulteert dat in een executable van 418.026 bytes. Met de -s vlag, voor het strippen van symbolische info, wordt dat een executable van 214.016 bytes. Echter, als ik het volgende, traditionele C-voorbeeld compileer, [code:1:13933169b2] #include <cstdio> int main ( int argc, char **argv ) { printf("Hallo wereld!\n"); return 0; } [/code:1:13933169b2] levert dat een executable van slechts 14.511 bytes op. Een aanzienlijk verschil! Mijn vragen daarom: (1) is de <iostream>-library dusdanig groot waardoor dat verschil verklaard wordt, of is de C++-IO-bibliotheek van mingW gewoon omvangrijk geprogrammeerd? (2) Indien de eerste: bestaat er ook een mogelijkheid om de omvang van de exe's te beperken als je alleen de std::cout en std::cerr nodig bent? (3) Gebruikt iemand een andere compiler die kleinere executables oplevert bij gebruik van <iostream>? Dank!
  • De iostream-"library" maakt gebruik van (heel veel) multiple inheritance, voor alleen std::cout heb je zoiets van nog 6 andere header files nodig, die door <iostream> worden geinclude. De iostream-library is inderdaad erg groot en zwaar. De stdio.h library maakt geen gebruik van inheritance, simpelweg omdat er in C geen classes/inheritance bestonden. Waarschijnlijk is bij jouw compiler printf() gewoon een simpele aanroep naar een bios-output functie, of een platform-api, nadat de formatting gedaan is. Trouwens, als je <cstdio> gebruikt, moet je volgens mij ook std::printf() gebruiken i.p.v. printf(), want alles zit dan in de std-namespace. Andreas -- Don't try to confuse me with the facts!
  • Bedankt voor je antwoord. Als de iostream-library gewoon zo groot is, dan ligt het niet aan mijn compiler. Da's een geruststelling :) Het gebruik van std::printf() i.p.v. prinf() is bij mij trouwens niet afgedwongen door mijn compiler.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.