C言語 ファイルの分割

C言語改訂版1 はじめてのプログラミング (CD-ROM付) (プログラミング学習シリーズ)

C言語改訂版1 はじめてのプログラミング (CD-ROM付) (プログラミング学習シリーズ)

関数を作ったら、プロトタイプの宣言を集めたヘッダファイルを作る

ことが鉄則とのこと。プロトタイプ宣言とは、

void decrease (int *p);

のように、関数の型だけをコンパイルに知らせるための記述のこと。

 

まず本編のファイルは次のように書いておく。

//test.c
#include "myfunction.h"  //ヘッダファイルの指定 #include <stdio.h> main () { int num; num = 10; decrease(&num); printf("num=%d\n",num); }

次に関数の中身を書いたファイル。

//decrease.c
void decrease(int *p) {
        (*p)-- ;
}

忘れずにヘッダファイルを作っておく。

//myfunction.h
void decrease(int *p); //ヘッダファイルにはプロトタイプ宣言のみ

これで同じフォルダにtest.c, decrease.c, myfunction.hが置いてある状態となる。コンパイル時には、次の様にヘッダファイルは除いて実行。

(ファイルが沢山あるときは、別の効率良い方法があるのだろう)

gcc test.c decrease.c -o test.exe #-o以降は実行ファイルの名前]

【追記】

自分のノートPCで実行すると、以下のようなエラーが出る。しかし、実行結果は正しい。研究室のUnix環境では何もエラーは出ない。

      0 [main] gcc-4 6548 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFE90000 != 0x0 mem alloc base 0x0, state 0x10000, size 65536, Win32 error 487
    347 [main] gcc-4 6548 C:\cygwin\bin\gcc-4.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed
   1272 [main] gcc-4 6548 open_stackdumpfile: Dumping stack trace to gcc-4.exe.stackdump
      1 [main] gcc 8880 fork: child -1 - forked process 6548 died unexpectedly, retry 0, exit code 256, errno 11
1094079 [main] gcc-4 6400 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFE90000 != 0x0 mem alloc base 0x0, state 0x10000, size 65536, Win32 error 487
1094588 [main] gcc-4 6400 C:\cygwin\bin\gcc-4.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed
1096025 [main] gcc-4 6400 open_stackdumpfile: Dumping stack trace to gcc-4.exe.stackdump
4096889 [main] gcc 8880 fork: child -1 - forked process 6400 died unexpectedly, retry 0, exit code 256, errno 11
5119640 [main] gcc-4 3896 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFE90000 != 0x0 mem alloc base 0x0, state 0x10000, size 65536, Win32 error 487
5120123 [main] gcc-4 3896 C:\cygwin\bin\gcc-4.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed
5121584 [main] gcc-4 3896 open_stackdumpfile: Dumping stack trace to gcc-4.exe.stackdump
8090259 [main] gcc 8880 fork: child -1 - forked process 3896 died unexpectedly, retry 0, exit code 256, errno 11

今はとりあえず放置して先に進む…