芋出し画像

【昔話】C蚀語の話の続き

 前回、高玚アセンブラず呌ばれた「C蚀語」のお話を曞きたした。熱が冷めないうちに続線を。

 前回、から++ ãžé€²åŒ–する䞭で初期++ ã§ã¯äž€åºŠã€ïŒ£èš€èªžãžå€‰æ›ã—おからコンパむラでコンパむルしおいたずいうずころたでお話ししたした。たた、圓時蚀語系は非垞に高䟡であったため、「I/O」誌の䞭でたびたび読者が䜜った蚀語系のプログラムが掲茉されおいたした。掲茉された蚀語は「C蚀語」に限らずかなりいろいろな蚀語があったように思いたす。

 今回は、ちょっず時代を戻しおC蚀語のちょっずだけディヌプなずころを曞きたす。ずいっおも、玠人ですから3mmくらいの深さですが

 C蚀語には、各匕数の評䟡順序に぀いお芏定されおいないずいうのをご存じでしょうかもちろんよくご存じの人も倚いでしょうね。

int i = 1;

printf("%d %d\n", i++, i++);

ずおも、単玔なコヌドですね。
実行結果は、どうなるでしょうか

ア 1   2
む  2   1

どちらでしょうか
なんず、どちらずもあり埗るのです。コンパむラによっおも挙動が違いたした。

int f(int x)
{
    printf("%d\n", x);
    return x;
}

func(f(1), f(2), f(3));

fずいう関数が定矩されおいお、それをfuncの匕数で䜿っおいたす。
衚瀺が、



ずなるのか



ずなるのか保蚌されおいない蚀語なのです。
「おそろしいですねぇ。こわいですねぇ。」ず淀川さんに蚀われそうです。
もし、の䞭身が副䜜甚のある匏を曞いおいたらシステムが砎綻する可胜性がありたす。

この蟺りが、高玚アセンブラなんです。

 すなわち「人間様の郜合より、機械の郜合」に合わせおいるからです。
CPUのアヌキテクチャによっおどちらが有利効率的かずいうこずが優先されたす。珟圚の人間偎に完党に媚びた蚀語ずは違いおそろしく硬掟なんです。
 倉数を型なしでいきなり䜿うなんお狂気の沙汰なんお叀い人間なので思っおしたいたす笑

「C蚀語」ず、よく䌌おいる「Java」では、しっかり匕数は巊から右ぞ評䟡されるこずが決たっおいたす。ここが「C蚀語」の「C蚀語」たる所以です。
「C蚀語」も䜕床も仕様の芋盎しがされおいたす。たずえば
珟圚のC蚀語は、「//」の コメント が䜿えたす。でも、この非垞に危険な匕数の評䟡順序に぀いおはいただに取り決めがないのです。

察象ずするCPUのアヌキテクチャによっお動䜜が異なるのは圓たり前の䞖界なんです。ここたでくるずすがすがしいですね。

どんなコヌドでも、「C蚀語」は受け入れるよ。でも、責任はプログラマにあるからね。移怍性で困るなら最初から次のように曞いおね。

a = f1();
b = f2();
func(a, b);

このように芋おいくずなんだかポむンタの話ず䌌おいるず思いたせんか
危ないコヌドもかけるよ。でも知らないからね。っお感じです。
「C蚀語」は、自由ですね。やはり自由には責任が䌎うんです。

C蚀語は、語りだしたらキリがないです。
長くなっおきたのでこの蟺で。

2026.8.28

いいなず思ったら応揎しよう