C言語関係掲示板

過去ログ

No.1189 複数のソースファイルに分けて書くとき#includeはどうするか?

[戻る] [ホームページ]
No.15529

プログラムの書き方
投稿者---もっち(2004/07/14 23:20:10)


プログラムをいくつかのソースファイルに分けて書く際、
#include を皆さんはどうされていますか?

私は今までは、各ソースファイルごとに必要なヘッダーファイルを
インクルードしていたのですが、最近は headers.h のようなファイルを用意して
そこに
#include <stdio.h>
#include <stdlib.h>
...
とか全体で必要なものを全て書いて、各ソースファイルは
#include "headers.h"
をするだけにしてます。

このような書き方には何か問題とかありますか?


No.15532

Re:プログラムの書き方
投稿者---NykR(2004/07/14 23:54:49)


>プログラムをいくつかのソースファイルに分けて書く際、
>#include を皆さんはどうされていますか?

使用するモジュールのインターフェースが書かれているヘッダをインクルードします。


>私は今までは、各ソースファイルごとに必要なヘッダーファイルを
>インクルードしていたのですが、最近は headers.h のようなファイルを用意して
>そこに
>#include <stdio.h>
>#include <stdlib.h>
>...
>とか全体で必要なものを全て書いて、各ソースファイルは
>#include "headers.h"
>をするだけにしてます。

そういうことをするならファイルを分けないで、単一のソースファイルで書いた方が楽だと思います。


>このような書き方には何か問題とかありますか?

すべてのソースがすべてのヘッダに依存しているので、プログラムの構造がわかりにくい。
オブジェクトファイルが巨大になる
など。


No.15540

Re:プログラムの書き方
投稿者---REE(2004/07/15 10:20:08)


>そういうことをするならファイルを分けないで、単一のソースファイルで書いた方が楽だと思います。

そんなことは無いはずです。
あくまでもまとめているのは、include文だけですから

>>このような書き方には何か問題とかありますか?

>すべてのソースがすべてのヘッダに依存しているので、プログラムの構造がわかりにくい。

これは同意です。

>オブジェクトファイルが巨大になる

オブジェクトファイルの大きさは変わらないと思いますが・・・


他には、コンパイルに必要以上に時間がかかるようにもなります。



No.15542

Re:プログラムの書き方
投稿者---Ban(2004/07/15 10:27:56)


>>すべてのソースがすべてのヘッダに依存しているので、プログラムの構造がわかりにくい。
>これは同意です。

私もこれは同意です。


>他には、コンパイルに必要以上に時間がかかるようにもなります。

プリコンパイルヘッダが指定できる環境なら
トレードオフを考慮する利点もありえると思います。
# 最近は、GNU でも使えるようになりましたし。




No.15564

Re:プログラムの書き方
投稿者---NykR(2004/07/15 23:26:53)


>>そういうことをするならファイルを分けないで、単一のソースファイルで書いた方が楽だと思います。
>そんなことは無いはずです。
>あくまでもまとめているのは、include文だけですから

もっとすごいのを想像していました。新しい宣言が必要になる度に単一のヘッダファイルにそれを書き込んでいく姿を……。
各モジュールごとにヘッダがあってそれをまとめてインクルードしたものを一つ作る、というのであれば複数のファイルに分ける意味はあるかも知れません。
headers.hという名前でわかれ>自分


>>オブジェクトファイルが巨大になる
>
>オブジェクトファイルの大きさは変わらないと思いますが・・・

確かに、いろんなツールを駆使して、不必要な定数やシンボルを削ることは可能です。
けれども、普通に
cc -c hello.c

とやった場合、でソースは
#include <stdio.h>

int main(void)
{
    puts("Hello World");

    return 0;
}
ですが、このときオブジェクトファイルのサイズは10856バイトになりました。
#include <stdio.h>の代わりにint puts(const char*);にすると、サイズは2412でした。
ヘッダファイルの、オブジェクトファイルのサイズに対する影響は大きいと思います。

gcc version 2.96 20000731 (Turbolinux 2.96-9)で実験


No.15582

Re:プログラムの書き方
投稿者---REE(2004/07/16 11:43:01)


>>あくまでもまとめているのは、include文だけですから
>
>もっとすごいのを想像していました。新しい宣言が必要になる度に単一のヘッダファイルにそれを書き込んでいく姿を……。

元の発言をみるとそうとも取れますね
どちらなんでしょうか?

>>オブジェクトファイルの大きさは変わらないと思いますが・・・

>このときオブジェクトファイルのサイズは10856バイトになりました。
>#include <stdio.h>の代わりにint puts(const char*);にすると、サイズは2412でした。
>ヘッダファイルの、オブジェクトファイルのサイズに対する影響は大きいと思います。

申し訳ありません。憶測で発言していました。
実際に変わるとは思っていませんでした。



No.15624

Re:プログラムの書き方
投稿者---とおり(2004/07/17 19:34:54)


あとは、そのヘッダーファイルを書き換える度に、全く関係のないモジュールまで
全てリコンパイルされてしまう、という弊害もあります。
巨大なプログラムになると、フルビルドするのに馬鹿にならない負担が生じます。