K&Rを読もう(33) 2.12 優先度と評価順序

優先順位って面倒だと思う今日この頃。You, 全部括弧つけちゃいなよ。

インクリメントの副作用

K&R P66より。予測と異なる答えが出た。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int c = 'a';

    printf("%c %c %c %c\n", c++, c++, c++, c);

    return EXIT_SUCCESS;
}

実行してみる。

c b a d

えぇぇぇぇ・・・・バラバラなんっすけど・・・

K&Rより

関数呼び出し、入れ子になった代入文、インクリメントとデクリメント演算子は"副作用"を引き起こす。

ってことで、

printf("%c %c %c %c\n", c, c + 1, c + 2, c + 3);
a b c d

再代入を避ければ、副作用は無い。


関数型言語を学ぶ理由がひとつ増えた。