とある本を読んでいて、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 件のコメント:
コメントを投稿