« 2007年7月15日 - 2007年7月21日 | トップページ | 2007年9月9日 - 2007年9月15日 »

2007年8月 4日 (土)

C言語で知らなかったこと

たいしたことじゃないんですけど、C言語での書き方で新しく知ったので書いてみる。
まずはサンプルをprintfの引数に注目。

#include <stdio.h>

int main()
{
    int i;

    printf("%d\n", (i = 3, i * 3));
    printf("%d\n", (assert(i == 3), 10));

    return 0;
}

というプログラムの実行結果が

9
10

となる。
一個目のprintfの引数で、

  1. iに3が代入される
  2. 3が代入されているiに3をかける

といったように()の中の式がちゃんと評価されている。んでもって最後のが()の最終的な評価の値になっている。
これはSolaris付属?のCコンパイラでも動いたので、GNUの拡張ってわけでもなさそう。

使える場面は、とりあえず二個目のprintfで書いたような、assertを絡めるときくらいしか思いつかないけど、おもしろいうごきだと思う。

| | コメント (2) | トラックバック (0)

« 2007年7月15日 - 2007年7月21日 | トップページ | 2007年9月9日 - 2007年9月15日 »