ページ 11

ヘッダファイル

Posted: 2007年10月14日(日) 19:28
by 大工
自作ヘッダファイルを作って、その中に関数のプロトタイプ宣言を入れなくてもfunc2.cで定義したvoid function(void); がfunc.cで利用することが出来ました。

危険なことをしてそうなのは分かるのですがリンクの時点でコンパイラが都合を付けてくれているのでしょうか?

それともヘッダファイルには関数のプロトタイプ宣言はいらない??


ご協力おねがいします。

func.c
#include <stdio.h>

int main(void){

  function();

  return 0;
}
func2.c
#include <stdio.h>

void function(void) {

printf("これはテスト\n");
}

Re:ヘッダファイル

Posted: 2007年10月14日(日) 21:35
by box
> 自作ヘッダファイルを作って、その中に関数のプロトタイプ宣言を入れなくても

その、「プロトタイプ宣言を書いていない自作ヘッダーファイル」を
見せていただくことは可能ですか?

Re:ヘッダファイル

Posted: 2007年10月14日(日) 22:42
by 大工
すみません、それは作ってないです・・・

それは、stdio.h以外はなにもインクルードせずにという意味です。。。。

あと、上記がgccでコンパイルした結果なんですがBorlandだと"プロトタイプ宣言がない"とエラーで返ってきました。。。

Re:ヘッダファイル

Posted: 2007年10月14日(日) 22:52
by tk-xleader
C言語の場合、プロトタイプ宣言は絶対ではないはずです。GCCは、ANSI Cに準拠しているので、これをエラーとはしないのだと思います。
しかし、BCCの場合は、C++のコンパイラなので、C++の規則である「プロトタイプの省略不可」が適用されたのだと思います。
ただし、Cでプロトタイプの省略を行うのは、やめておいたほうがいいと思います。

Re:ヘッダファイル

Posted: 2007年10月14日(日) 23:23
by 大工
はい、わかりました。

ですが、このようなプログラムを書いてgccで通ったらこれで"正解"

そして、その間違いに気付かずに会社に就職

なんか怖いですね^^;

こんなことは無いと思いますが・・・・