オルタナティブ・ブログ > mtaneda ブログ >

中小企業の開発者は会社で何をしているのか

どれだけ自分の使っている言語に詳しいか

»

ちょっとマニアックでどうでもよいC言語ネタです。
タイトルはあまり関係ありません・・・

私がよく使うC言語では、


n = 1;
printf("n=%d\n", n = n + n++ + n);
printf("n=%d\n", n);

などという、怪しいコードを書くと通常(いろいろなコンパイラがあるため)は、
3と4という結果になります。

n++ の優先度が一番高いのですが、ポストインクリメントなので式全体の評価が完了した後にインクリメントされます。
そのため、1回目のprintf()では、1 + 1 + 1の実行結果が返され、
2回目のprintf()では 1 + 1 + 1の結果をインクリメントした4になるのです。

原稿を書くために、実証実験をしたあと、
「そういえば他の言語はどうなんだろう?」
と、疑問に思って実験してみました。

Java


public class test {
public static void main(String[] args) {
int n = 1;
System.out.println(n = n + n++ + n);
System.out.println(n);
}
}

結果は4と4

PHP


$n = 1;
print $n = $n + $n++ + $n . "\n";
print $n . "\n";

結果は5と5

意外と違うものですね。

PHPに詳しいメンバーにきいてみたところ、実験してみるまで結果はわからなかったとのことです。

同じC言語の文法が元になっている言語同士でも、細かなところは違うものですね。

こういう実験は地味に面白いです。

Comment(3)