#アセンブラ
何故 ARM だと char が unsigned になるのか
タイトル通りです。
signed char ではなく
unsigned char でもなく
プレーンで char 型を使ったときに
何故 ARM だと unsigned で展開されるのか
従来、C言語では、
『unsigned も signed も指定しない場合、 signed である』
というのが一般的でした。
unsigned も signed も指定しないプレーンな char を使用し
C言語コンパイラ依存した話の続編「Visual Studio 2019 はどうコンパイルするのか」
最早、毒食らわば皿までといった心境です。
再び、この記事の続き。
前回は clang コンパイラについて解析しました。
ならば、 Visual Studio 2019 はどうなのか。
そういうことが気になる(笑)。
今回は、その Visual Studio 2019 のお話です。
※以下、VS = Visual Studio 2019 の意。
VS が出力したアセンブラ以下が、VS が出力
C言語コンパイラ依存した話の続編「clang はどうコンパイルするのか」
こちらの記事の延長戦です。
というわけで(どういうわけ?)、 clang コンパイラが吐き出したアセンブラを解析してみました。
結論から言うと、clang コンパイラの場合は次のようになります。
引数 i 、 j は三項演算する前に待避しておく。
「j--」(後置デクリメント)は、 j-- する前の値を別のレジスタに待避する。
まず、clang が出力したアセンブラを見てみます。スマホ版
【C言語】コンパイラが何をしているのか、ちょっとのぞいてみよう その3 コンパイル
C言語のコンパイラというのは、次の4つのステップで成り立ちます。
(1)プリプロセッサ
(2)コンパイル
(3)アセンブル
(4)リンク
前回は「(1)プリプロセッサ」について記載しました。
次は「(2)コンパイル」について書いてみましょう。
コンパイルは、C言語を翻訳してアセンブリコードを出力します。
アセンブリコードはCPUによって異なります。このため、いろいろなCPUに対応したいろ