- 締切済み
ソースとヘッダの境界とは?
C/C++のプログラミングにおいて、これだけは絶対にソースファイル(.c,.cpp)書かなくてはならない!というものはあるのでしょうか? 仕事でプログラミングをしている時に、同僚から「その変数の定義はソースファイルに書かないとダメ」と言われました。 「その変数の定義」とは、メモリの物理アドレスへの割り付けを伴うもので、以下のようなものです。 #pragma section=~, IO=~, attr=~, locate=0xFECA0000 __io int piyo; /* 0xFECA0000 */ __io int hoge; /* 0xFECA0004 */ 特殊なコードで分かりにくく、申し訳ないのですが、簡単に言えば、「locate」で指定した物理アドレスから連続で変数を割り当てていくものです。 このコードをなぜヘッダではなく、「絶対に」ソースファイルに書かなくてはならないのかを尋ねましたが、明確な回答は得られませんでした。 私の認識としては、ソースファイルにAという処理を書くことと、Aの処理を書いたヘッダファイルをincludeすることとは、コンパイラにとっては全く同じことだと思ってます。 試しに、以下のソースを書いた「ヘッダ」ファイル”test.h”と「#include "test.h"」とだけ書いたソースファイル”test.c”を作成してビルドしたら、ちゃんと動く実行ファイルができました。 #include <stdio.h> int main(void) { printf( "Hello, World!\n" ); return 0; } 今回ご回答頂きたいのは、上記の物理アドレス割り付けのコードについてではなく、一般的な話として、これは「絶対に」ソースファイルに書かなきゃいけない!それは「絶対に」ヘッダファイルに書かなきゃいけない!とか言うものがあるのかどうか。あるとすれば、具体的にどのようなものなのかと言うことです。 何卒よろしくお願いいたします。
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- walktkd
- ベストアンサー率22% (103/461)
Cは使ってますがC++は全然分かりません。その前提で。 質問者さんの考えているとおり、これは必ずソースに、これは必ずヘッダに、というのは思い当たりません。 コンパイル時は実コンパイル前にプレコンパイルが行われて、ヘッダの中身がプレコンパイル時にインクルードしてる行にまるまるコピペされたものが実コンパイルされるイメージです。 この仕組みからもないと思います。 ただし、仕事で納品するプログラムは動けばいいという訳ではなく、読みやすさ、後々のメンテナンスのしやすさ等も品質として評価されます。(特別技術の高い人がCodingして、平均的能力の担当者に代わったら、仕様変更時に触れなくなってしまったとかも避けなければいけません。同じような10本のプログラムのうち1本だけ作りが違うとかも良くありません。) 通常、複数で開発する場合、Coding規約というものがありますがそれに違反してませんか? もし、違反してればCのルール上問題なしでも同僚のいう「絶対ダメ!」が正解です。 (試しにやった中身全てをヘッダに入れるとかあまりに非常識な場合も仕事の上では「絶対ダメ!」になると思います。)
- 1
- 2