タグ

ブックマーク / srad.jp/~Yak! (1)

  • C における一時オブジェクトの生存期間 | Yak!の日記 | スラド

    Twitter 上で C++ STL の vector に関して評価順序不定ではまっているコードの例が流れていてそこから C 言語における(規格上の)落とし穴に行き着いたのでメモ。 // from http://www.jpcert.or.jp/sc-rules/c-exp35-c.html #include <stdio.h> struct X { char a[6]; }; struct X addressee(void) { struct X result = { "world" }; return result; } int main(void) { printf("Hello, %s!\n", addressee().a); return 0; } 上記コードは C++ では問題ないコードであるが、一方 C99 では未定義動作を含むコードである。理由はJPCERT のページに記述

    nakag0711
    nakag0711 2011/10/16
    structは中に配列があったとしても値渡しだがコピーされて戻された一時的な戻り値の生存期間がC99より前のCでは短いという話。
  • 1