2016年9月25日日曜日

C言語のブロックの値

とある本を読んでいて、C言語でブロックの値を変数に代入することができることを知った。

たとえば、以下のようなプログラム。

#include <stdio.h>
int main(void)
{
    int i = 0;
    i = ({
        int j = 1;
        j + 1;
    });
    printf("i = %d\n", i);
    return 0;
}

実行結果は以下のとおり。
$ gcc t.c
$ ./a.out
i = 2

少しプログラムを変えて、ブロックの最後が変数への代入文だったらどうなるか。

#include <stdio.h>
int main(void)
{
    int i = 0;
    i = ({
        int j = 1, k; /* modified */
        k = j + 1;    /* modified */
    });
    printf("i = %d\n", i);
    return 0;
}
実行結果は最初のプログラムと同一。
$ gcc t.c
$ ./a.out
i = 2
今まで気にしたことがなかったが、ブロックの値は最後の式の値になるということか。
今度調べてみることにしよう。

0 件のコメント:

コメントを投稿