はじめての C

[Learning GNU C]

1.2. C とは なにか?

compiler と よばれる tool は high-level の code を 機械語に 変換するとき 使われる。 プログラムは C で 書くことができ それは compiler に 特定の hardware へ 正確に 命令させるのに 適していたので どんな コンピュータに 対しても コンパイル*1 (compile) が された。

では C が assembly 言語と 比較して どれだけ 読みやすいかを 知るため それぞれで 書かれた 小さな プログラムを 下に 見てみよう。

Example 1-1. C vs. Assembly language

.section .rodata
.LCO:
.string "Tax Due: %d\n"
.text
.align 2
.globl main
.type .main,@function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $1000, %eax
movl $400, %edx
movl $0x3e6147ae, -12(%ebp)
subl %edx, %eax
pushl %eax
findl (%esp)
leal 4(%esp), %esp
fmuls -12(%ebp)
fnstcw -18(%ebp)
movw -18(%ebp), %ax
movb $12, %ah
movw %ax, -20(%ebp)
fldcw -20(%ebp)
fistpl -16(%ebp)
fldcw -18(%ebp)
subl $8, %esp
pushl -16(%ebp)
pushl $,LCO
call printf
addl $16, %esp
movl $1, %eax
leave
ret
.Lfel:
.size main,.Lfel-main

And the program in C:

#include <stdio.h>

int
main()
{
int wages = 1000;
int tax_allowance = 400;
float tax_rate = 0.22;
int tax_due;

tax_due = (wages - tax_allowance) * tax_rate;

printf("Tax Due: %d euro\n", tax_due);

return 0;
}

たとえ C を 知らなくても あなたは どちらが より わかりやすいと 感じただろうか。 どちらの プログラムも その 出力 (output) は 同じだ。

"Tax Due: 131 euro."

(上に) 示された assembly の code は "80836" の 命令系で 書かれ 異なる 命令系統が 使われる 機械では 作動しないだろう。 C の code は ほぼ どんな コンピュータでも コンパイルすることが できる。

*1:編集・翻訳