マガジンのカバー画像

C言語

63
C言語に関するあれこれ
運営しているクリエイター

#引数

C言語コンパイラ依存した話の続編「clang はどうコンパイルするのか」

C言語コンパイラ依存した話の続編「clang はどうコンパイルするのか」

こちらの記事の延長戦です。

というわけで(どういうわけ?)、 clang コンパイラが吐き出したアセンブラを解析してみました。

結論から言うと、clang コンパイラの場合は次のようになります。

引数 i 、 j は三項演算する前に待避しておく。

「j--」(後置デクリメント)は、 j-- する前の値を別のレジスタに待避する。

まず、clang が出力したアセンブラを見てみます。スマホ版

もっとみる
C言語 「main」関数と分離する

C言語 「main」関数と分離する

序章前回までで足し算プログラムを作りました。

関数は「main」関数が1つだけ。

「main」関数はC言語において特殊です。
プログラムを実行したとき、この「main」関数から実行されます。
プログラムの中で「main」関数は必ず必要であり、複数存在してはいけません。唯一無二の存在です。

C言語で書かれたプログラムは必ず「main」関数を持ちます。
プログラムAからプログラムBへコードを移植

もっとみる
【C言語】コンパイラが何をしているのか、ちょっとのぞいてみよう その3 コンパイル

【C言語】コンパイラが何をしているのか、ちょっとのぞいてみよう その3 コンパイル

C言語のコンパイラというのは、次の4つのステップで成り立ちます。

(1)プリプロセッサ
(2)コンパイル
(3)アセンブル
(4)リンク

前回は「(1)プリプロセッサ」について記載しました。

次は「(2)コンパイル」について書いてみましょう。

コンパイルは、C言語を翻訳してアセンブリコードを出力します。

アセンブリコードはCPUによって異なります。このため、いろいろなCPUに対応したいろ

もっとみる
【C言語】ポインタ ~ポインタを使って関数から情報を取得してみる ~

【C言語】ポインタ ~ポインタを使って関数から情報を取得してみる ~

前回、ポインタの概要について説明してみました。

では、ポインタはどんな風に使うのでしょうか。

「関数の引数」です。

こんな関数を考えてみましょう。

「2つの変数を足し算する関数」
(ありがちだなぁ(苦笑))

引数は2つ。
足し算した結果は戻り値で返しましょうか。
こんな感じです。

int add(int a, int b){ return (a + b);}

これは、ポイ

もっとみる