Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

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

AndreasV
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!
    ");
    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

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