Notice : 内容無保証。禁無断転載。リンク自由。

4.2 使い方

関数は、宣言されるよりも前に使われると、 すべて int foo(int) ; という型をもつとして扱われます。 (どんな呼び出しかたをされていても)

int main(void) {
        :
    x = foo(y) ;    // ここで始めて出てきたので、int foo(int) ;
        :           // だとみなされる。
        :
    cp = poo() ;    // int poo(int) ; とみなされるので、引数
        :           // がないために warningがでる。
    return 0 ;
}

char* poo(void) {   // ここまで来たところで、 同じ名前で違う
        :           // 型の関数を定義していることになり、2重
        :           // 定義エラーとなる。
}

これを避けるためにはどうしたらよいでしょうか?
次のような解決法が考えられます。

  1. 関数は定義してから使う (PASCAL 式)

    char* poo(void) {    // 関数本体
            :
    }
    
    int main(void) {
            :
        cp = poo() ;    // 使用
            :
        return 0 ;
    }
  2. 始めにプロトタイプ宣言をしておく

    char* poo(void) ;    // プロトタイプ宣言
    
    int main(void) {
            :
        cp = poo() ;    // 使用
            :
        return 0 ;
    }
    
    char* poo(void) {   // 関数本体
            :
    }

個人的には (1)の方が好きですが、 上の例の場合、 main() と poo() が別ファイルになっているとしたら、 プロトタイプ宣言は必須です。


[ <前 ][ 目次 ][ 次> ]
トップページに戻る