91

警告が表示されます : 関数 'Fibonacci' の暗黙の宣言は C99 では無効です。どうしたの?

#include <stdio.h>

int main(int argc, const char * argv[])
{
    int input;
    printf("Please give me a number : ");
    scanf("%d", &input);
    getchar();
    printf("The fibonacci number of %d is : %d", input, Fibonacci(input)); //!!!

}/* main */

int Fibonacci(int number)
{
    if(number<=1){
        return number;
    }else{
        int F = 0;
        int VV = 0;
        int V = 1;
        for (int I=2; I<=getal; I++) {
            F = VV+V;
            VV = V;
            V = F;
        }
        return F;
    }
}/*Fibonacci*/
4

4 に答える 4

96

関数は、呼び出される前に宣言する必要があります。これは、さまざまな方法で実行できます。

  • ヘッダーにプロトタイプを書き留め
    ます 関数が複数のソース ファイルから呼び出せる場合は、これを使用します。プロトタイプをファイル (例: )
    int Fibonacci(int number);
    に書き留めてから、C コードに書き込んでください。.hmyfunctions.h#include "myfunctions.h"

  • 初めて呼び出される前に関数を移動します。これは、関数の 前に関数
    を書き留めることを意味します
    int Fibonacci(int number){..}
    main()

  • 初めて呼び出される前に関数を明示的に宣言する
    これは上記のフレーバーの組み合わせです: 関数の前に C ファイルに関数のプロトタイプを入力しmain()ます

追加の注意として、関数int Fibonacci(int number)が実装されているファイルでのみ使用される場合はstatic、その翻訳単位でのみ表示されるように宣言する必要があります。

于 2013-04-06T11:31:28.600 に答える
29

コンパイラは、関数を使用する前に関数を知りたがっています

呼び出す前に関数を宣言するだけです

#include <stdio.h>

int Fibonacci(int number); //now the compiler knows, what the signature looks like. this is all it needs for now

int main(int argc, const char * argv[])
{
    int input;
    printf("Please give me a number : ");
    scanf("%d", &input);
    getchar();
    printf("The fibonacci number of %d is : %d", input, Fibonacci(input)); //!!!

}/* main */

int Fibonacci(int number)
{
//…
于 2013-04-06T11:01:19.173 に答える
1

同じ警告が表示されます (アプリをビルドできません)。を追加するC functionと、ファイルObjective-C's .m fileで宣言するのを忘れていました。.h

于 2016-11-30T10:20:55.197 に答える
1

in c 関数は、呼び出される前に宣言する必要があります

ヘッドファイルを含める

于 2021-10-31T04:10:44.667 に答える