- 運営しているクリエイター
#引数
C言語コンパイラ依存した話の続編「clang はどうコンパイルするのか」
こちらの記事の延長戦です。
というわけで(どういうわけ?)、 clang コンパイラが吐き出したアセンブラを解析してみました。
結論から言うと、clang コンパイラの場合は次のようになります。
引数 i 、 j は三項演算する前に待避しておく。
「j--」(後置デクリメント)は、 j-- する前の値を別のレジスタに待避する。
まず、clang が出力したアセンブラを見てみます。スマホ版
C言語 「main」関数と分離する
序章前回までで足し算プログラムを作りました。
関数は「main」関数が1つだけ。
「main」関数はC言語において特殊です。
プログラムを実行したとき、この「main」関数から実行されます。
プログラムの中で「main」関数は必ず必要であり、複数存在してはいけません。唯一無二の存在です。
C言語で書かれたプログラムは必ず「main」関数を持ちます。
プログラムAからプログラムBへコードを移植
【C言語】コンパイラが何をしているのか、ちょっとのぞいてみよう その3 コンパイル
C言語のコンパイラというのは、次の4つのステップで成り立ちます。
(1)プリプロセッサ
(2)コンパイル
(3)アセンブル
(4)リンク
前回は「(1)プリプロセッサ」について記載しました。
次は「(2)コンパイル」について書いてみましょう。
コンパイルは、C言語を翻訳してアセンブリコードを出力します。
アセンブリコードはCPUによって異なります。このため、いろいろなCPUに対応したいろ