ページ 11

ヘッダーファイルでの定義

Posted: 2012年3月12日(月) 23:28
by ゆう
現在、仕事で必要となり、C言語、C++を勉強しているのですが、あるヘッダーファイルに
次のような定義がされていました。ヘッダーファイルには宣言しかできないと思っていた
のですが、ヘッダーファイルに定義しても問題ないのでしょうか。

/* AAA.h */
typedef struct st_test{
int i;
int j;
}ST_TEST;

ST_TEST stData[] = { <----- 宣言と同時に定義??
{1, 1},
{2, 2},
{3, 3}
};

初歩的なことで申し訳ございませんが、
どうかご教授ください。よろいしくお願いします。

Re: ヘッダーファイルでの定義

Posted: 2012年3月13日(火) 00:07
by softya(ソフト屋)
1つのソースファイルにしかインクルードされていないならエラーにはならないと思います。
まぁ、ヘッダに分ける意味もないのですが。

Re: ヘッダーファイルでの定義

Posted: 2012年3月13日(火) 02:29
by ISLe
インクルードディレクティブ(#include)は、その場所に指定されたソースファイルを差し込むだけなので、ソースファイルに書けることなら何でも書くことができます。
複数のソースファイルでインクルードしたときにコンパイルエラーにならないように宣言しか書かないようにしているのであって、できないわけではないのです。

Re: ヘッダーファイルでの定義

Posted: 2012年3月13日(火) 08:29
by たかぎ
softya(ソフト屋) さんが書きました:1つのソースファイルにしかインクルードされていないならエラーにはならないと思います。
まぁ、ヘッダに分ける意味もないのですが。
大きな配列の初期化子を別のファイルに記述して、それをインクルードすることは普通にありますね。