第 7 章 言語処理系 ( コンパイラ ) 149
7.2 C コンパイラ
test.c
¶ ³
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("Hello, C world!\n");
6 return 0;
7 }
µ ´
利用しているターミナルによっては,ソースコードにあらわれるバックスラッシュ(\) が,¥になる場合もありますが,どちらも同じ意味です.
このソースファイルをコンパイルするためには,gccというコマンドを使ってコンパイ ルを行います.gccとは,GNU Compiler Collection(gcc)を実行するためのコマンドで す.gccはFree Software Foundationという組織がオープンソースで提供しているコンパ イラで,様々なコンピュータ上で動作します.gccを使ってコンパイルをするために,以 下のようにtest.cが入っているディレクトリでコマンドを実行してください.
¶ 実行例 ³
$ gcc test.c
µ ´
コンパイルを実行すると,a.outという名前の実行ファイルが生成されます.生成され た実行ファイルを実行するには,以下のようにします.
¶ 実行例 ³
$ ./a.out
Hello, C world!
µ ´
実行すると,”Hello, C world!”という文字列がターミナルに表示されます.
gccコマンドでオプションを指定せずにコンパイルを行うと,前述のようにa.outとい う名前の実行ファイルが出力されます.これを任意の名前に変えるためには,gccの”-o”
オプションを使用します.例えば,helloという実行ファイルを出力したい場合,以下の ようにします.
¶ 実行例 ³
$ gcc -o hello test.c
µ ´
7.2.2 ヘッダファイル,ライブラリ
先ほどのプログラムでは,プログラム内で文字列を出力するためにprintf関数が使わ れています.この関数を用いるために,printf関数が宣言されているstdio.hという名前
のファイルをインクルードしています.このようなファイルをヘッダファイル(Header File)と言います.
また,関数の宣言に対応する関数の実体は,ライブラリファイル(Library File)と呼 ばれるファイルの中に存在します.ライブラリファイルは,コンパイル時に結合する必要 があり,このことをリンク(Link)すると言います.標準的なライブラリファイルは自動 的にコンパイル時にリンクされますが,そうではないライブラリは明示的に指定する必要 があります.これについては,7.4.4節で詳しく説明をします.
どの関数がどのインクルードファイルに宣言されているかを調べるためには,manコマ ンドを使ってマニュアルで調べます.調べるときには,シェルから”man (関数名)”と実行 します.また,このマニュアルの中では,関数の使い方や関数の引数,オプション,注意 などが載っていますので,関数を使うときにはこのマニュアルを見るようにしましょう.
例えば,sqrt関数のmanを開くと,マニュアルに以下のように載っています.書式の 部分では,関数の戻り値,引数などが書いてあります.説明の部分では,この関数の使い 方などが書いてあります.バグの部分では,関数を使う際の注意が書いてあるので,注意 が必要です.
sqrt関数のman
¶ ³
SQRT(3) BSD Library Functions Manual SQRT(3)
NAME
sqrt -- square root function SYNOPSIS
#include <math.h>
double
sqrt(double x);
long double
sqrtl(long double x);
float
sqrtf(float x);
DESCRIPTION
The sqrt() function compute the non-negative square root of x.
SPECIAL VALUES
sqrt(-0) returns -0.
sqrt(x) returns a NaN and generates a domain error for x < 0.
SEE ALSO math(3) STANDARDS
The sqrt() function conforms to ISO/IEC 9899:1999(E).
BSD December 11, 2006 BSD
µ ´
参考文献
• man gcc
• B.W.カーニハン/D.M.リッチー著 石田晴久訳
「プログラミング言語C(第2版)ANSI規格準拠」(共立出版)