『Cパズルブック』(Alan R.Feuer, 1985)
[Mac M2 Pro 12CPU, MacOS Ventura 13.3.1, clang 14.0.3]
問1.5.3の解法は以下の通りです。
パズルなので楽しめていますが、実務でそのまま使うのは顰蹙ものでしょうか。せめて括弧で補足したいところです。
#include <stdio.h>
#define PRINT(int) printf("%d\n",int)
int main() {
int x , y, z;
x = 3; y = 3; z = 1;
PRINT(z += x < y ? x++ : y++);
PRINT(y); PRINT(z);
// PRINT(z += (x < y ? x++ : y++));
// 計算1: x < y
// 3 < 3 は FALSE
// 計算2: x < y ? x++ : y++
// FALSEはy++
// y++は評価時はまだ加算しないため3のまま
// 計算3: z += Rt
// z = z + Rt = 1 + 3 = 4
// 計算4: y
// y++評価後は1増えるので4になる
// 計算5: z = 4
// よって出力は4, 4, 4となる
return 0;
}
4
4
4