pod-initialisierung in c/c++ mix



  • auf arbeit schrieb ich folgendes:

    irgendein_pod life = {0};
    life.answer = 42;
    

    ein halbes jahr später steht nun dort:

    irgendein_pod life;
    memset(&life, 0, sizeof(irgendein_pod));
    life.answer = 42;
    

    das ist c++ code, der mit vc++ 2012 und g++ >= 4.6 kompiliert wird. irgendein_pod kommt aus altem c-code. geht davon aus, dass dort alles in c denkbare drin sein kann.

    ich behaupte, dass mein code in jedem fall das gleiche in kürzer tut. bin mir aber nicht sicher, dass ich nichts übersehe. ist das memset notwendig?


  • Mod

    iih old school schrieb:

    ich behaupte, dass mein code in jedem fall das gleiche in kürzer tut. bin mir aber nicht sicher, dass ich nichts übersehe. ist das memset notwendig?

    Es gibt einen kleinen Unterschied: die memset-Variante setzt auch Paddingbits auf 0, da man sich für diese in der Regel nicht interessiert, gibt es ansonsten keinen Unterschied.
    Ab C99 wäre es besser

    irgendein_pod life = { .answer = 42 };
    

    zu schreiben.

    In C++ ist irgendein_pod life = {}; äquivalent zur memset-Variante (das ist dann Value- und nicht Aggregatinitialisierung), allerdings ist diese Form in C syntaktisch nicht möglich.
    Edit: das ist ein Fehler im Standard, wird in C++1y korrigiert sein.


Log in to reply