Xcode - Warnung: Die implizite Funktionsdeklaration ist in C99 ungültig


73

Warnung erhalten: Die implizite Deklaration der Funktion 'Fibonacci' ist in C99 ungültig. Was ist los?

#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*/

Antworten:


81

Die Funktion muss deklariert werden, bevor sie aufgerufen wird. Dies kann auf verschiedene Arten geschehen:

  • Notieren Sie den Prototyp in einem Header.
    Verwenden Sie diese Option, wenn die Funktion aus mehreren Quelldateien aufgerufen werden soll. Schreiben Sie Ihren Prototyp einfach
    int Fibonacci(int number);
    in eine .hDatei (z. B. myfunctions.h) und dann #include "myfunctions.h"in den C-Code.

  • Verschieben Sie die Funktion, bevor sie zum ersten Mal aufgerufen
    wird. Notieren Sie sich die Funktion
    int Fibonacci(int number){..}
    vor Ihrer main()Funktion

  • Deklarieren Sie die Funktion explizit, bevor sie zum ersten Mal aufgerufen wird.
    Dies ist die Kombination der oben genannten Varianten: Geben Sie den Prototyp der Funktion in die C-Datei vor Ihrer main()Funktion ein

Als zusätzliche Anmerkung: Wenn die Funktion int Fibonacci(int number)nur in der Datei verwendet werden soll, in der sie implementiert ist, muss sie deklariert werden static, damit sie nur in dieser Übersetzungseinheit sichtbar ist.


1
@Cupidvogel: Wenn Sie eine neue Frage haben, stellen Sie bitte eine neue Frage.
eckes

4
Dies sah zu geringfügig aus, um eine neue Frage zu rechtfertigen, also habe ich hier gefragt.
SexyBeast

Warum muss ich den int Fibonacci(int number);Header eingeben? Ich denke, int Fibonacci(int);sollte in Ordnung sein?
Ka-Wa Yip

@JavierVazquez, es gibt kein Objective-C auf dieser Seite.
vikingosegundo

@vikingosegundo Ich glaube, ich habe einen anderen Kommentar kommentiert, aber vielleicht wurde er gelöscht ... Also lösche ich auch meinen Kommentar;)
Javier Vazquez

26

Der Compiler möchte die Funktion kennen, bevor er sie verwenden kann

Deklarieren Sie einfach die Funktion, bevor Sie sie aufrufen

#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)
{
//…

1

Ich habe die gleiche Warnung (meine App kann nicht erstellt werden). Als ich hinzufügen C functionin Objective-C's .m file, aber vergessen, erklärte sie in .hDatei.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.