マガジンのカバー画像

C言語

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

#アセンブラ

何故 ARM だと char が unsigned になるのか

何故 ARM だと char が unsigned になるのか

タイトル通りです。

signed char ではなく
unsigned char でもなく
プレーンで char 型を使ったときに
何故 ARM だと unsigned で展開されるのか

従来、C言語では、
『unsigned も signed も指定しない場合、 signed である』
というのが一般的でした。

unsigned も signed も指定しないプレーンな char を使用し

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

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

こちらの記事の続きです。

もう、いつまでやってんのよっていう感じだけど。
ようやく、 gcc です。
そして、これが gcc が出力したアセンブラです。

_main:LFB1445: .file 1 "../src/HelloWorld.cpp" .loc 1 15 0 .cfi_startproc leal 4(%esp), %ecx .cfi_def_c

もっとみる
C言語コンパイラ依存した話の続編「Visual Studio 2019 はどうコンパイルするのか」

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

最早、毒食らわば皿までといった心境です。
再び、この記事の続き。

前回は clang コンパイラについて解析しました。
ならば、 Visual Studio 2019 はどうなのか。
そういうことが気になる(笑)。

今回は、その Visual Studio 2019 のお話です。

※以下、VS = Visual Studio 2019 の意。

VS が出力したアセンブラ以下が、VS が出力

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

もっとみる
コンパイラが何をしているのか、ちょっとのぞいてみよう その1

コンパイラが何をしているのか、ちょっとのぞいてみよう その1

古い話で申し訳ないけれど、私がソフトウェア開発の仕事を始めた頃は、C言語レベルでデバッグできる環境はありませんでした。

そのため、いつもアセンブラでデバッグです。
お陰様で(?)、コンパイラが何をしているのかはよくわかりました。

コンパイラがなにをしているのか、気になったことはありませんか?
ちょっと覗いてみましょう。

昨今はとにかくすごい。
スマホでC言語がコンパイルできて、スマホで gd

もっとみる