タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Cに関するnakag0711のブックマーク (3)

  • Undefined Behavior Consequences Contest Winners – Embedded in Academia

    The contest that I posted the other day received some very nice entries. I decided to pick multiple winners since the best entries illustrate consequences of several kinds of undefined behavior. First, here’s the runner up, submitted by Octoploid: int main (void) { int x = 1; while (x) x <<= 1; return x; } This program is undefined by C99, where signed left shifts must not push a 1 bit into or pas

    nakag0711
    nakag0711 2015/02/07
  • Origin of C Language

    C言語は、C++やC#など「C」を名乗る言語はもとより、 1990年以降に盛んに使われるようになった各種言語の多くの源流とされている。 では、このC言語自身の起源はというと、 一般には下記の系譜であると理解されている。 ところが、 「C言語の構造体をめぐって」を まとめるに際して調べてみたところ、 この系譜は事実の記述としてあまりにも一面的であり、 系譜として「不適切」であると断言しても良いほどであるということが判った。 このことは、「C言語の構造体をめぐって」の 2005年5月2日以降の版(この文章の初稿公開日まで)にも簡単に記載していたが、 これを独立させて詳論してみることにした。 CPLを起源とする系譜が如何に「不適切」か まず結論を簡単にまとめておくと、以下のようになる。 B言語がBCPLから受け継いだものは、 非常に重要な側面ではあるものの、B言語の特徴の一部分に過ぎない。 BC

    nakag0711
    nakag0711 2012/09/11
  • 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