[an error occurred while processing this directive]
[an error occurred while processing this directive]#include <stdio.h> void printHello(void){ printf("Hello\n"); } int main(void){ printHello(); }このプログラムをコンパイルするには、
$ gcc sample.cとすると、a.out (Cygwinだとa.exe)が出来ます。
$ gcc sample.c -o sampleと書くと、sampleという名前の実行ファイルが出来ます。
[hello.c]
#include <stdio.h>
void printHello(void){
printf("Hello\n");
}
次に、これを用いるmain()を書きます。
[sample.c]
#include <stdio.h>
void printHello(void);
int main(void){
printHello();
}
ポイントは、sample.cに書いてある、
void printHello(void);です。これがないと、コンパイルした時に「printHello()という関数は見つからない」というエラーが出ます。 このため、「別のファイルにprintHello()がちゃんと書かれている」ことを示すために、この一行を書いておきます。これをプロトタイプ宣言といいます。
$ gcc -c hello.c $ gcc -c sample.c $ gcc sample.o hello.o -o sampleC言語のプログラムは、内部的にはオブジェクトファイル(なんとか.o)というファイルを一度作って、その後プログラムを作っています。
[hello.h]
void printHello(void);
そして、sample.cに以下の一行を加えます。
[sample.c]
#include "hello.h"
これで、先ほど書いたprintHello()関数のプロトタイプが不要になります。
もう一度全部書くと、以下のようになります。
[hello.c]
#include <stdio.h>
void printHello(void){
printf("Hello\n");
}
[hello.h]
void printHello(void);
[sample.c]
#include "hello.h"
int main(void){
printHello();
}
コンパイルは上と同じように出来ます。
$ gcc -c hello.c $ gcc -c sample.c $ gcc sample.o hello.o -o sample
sample : sample.o hello.o (タブ) gcc -o sample sample.o hello.o .c.o : (タブ) gcc -c $<(タブ)と書いたところは、タブを入力して下さい。初めの方はsampleというプログラムを作るにはsample.oとhello.oが必要で、実行するコマンドは"gcc -o sample sample.o hello.o" だという意味です。
sample.o : sample.c (タブ) gcc -c sample.c hello.o : hello.c (タブ) gcc -c hello.cと書いてもいいですが、先のように書くことで、あらゆる.oファイルを.cファイルから作る、という意味になります。
$ make sampleと打つと、目的のプログラムが得られます。