Xcode – Waarschuwing: Impliciete functiedeclaratie is ongeldig in C99

Een waarschuwing krijgen: Impliciete declaratie van functie ‘Fibonacci’ is ongeldig in C99.
Wat is er aan de hand?

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

Antwoord 1, autoriteit 100%

De functie moet worden gedeclareerd voordat deze wordt aangeroepen. Dit kan op verschillende manieren:

  • Schrijf het prototype op in een kop
    Gebruik dit als de functie kan worden aangeroepen vanuit verschillende bronbestanden. Schrijf gewoon uw prototype
    int Fibonacci(int number);
    in een .h-bestand (bijv. myfunctions.h) en vervolgens #include "myfunctions.h"in de C-code.

  • Verplaats de functie voordat deze de eerste keer wordt aangeroepen
    Dit betekent, noteer de functie
    int Fibonacci(int number){..}
    vóór uw main()-functie

  • Declareer de functie expliciet voordat deze de eerste keer wordt aangeroepen
    Dit is de combinatie van de bovenstaande smaken: typ het prototype van de functie in het C-bestand voor je main()-functie

Als aanvullende opmerking: als de functie int Fibonacci(int number)alleen wordt gebruikt in het bestand waarin het is geïmplementeerd, moet het als staticworden verklaard, zodat het is alleen zichtbaar in die vertaaleenheid.


Antwoord 2, autoriteit 32%

De compiler wil de functie weten voordat hij deze kan gebruiken

declareer gewoon de functie voordat je hem aanroept

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

Antwoord 3

Ik heb dezelfde waarschuwing (het is dat mijn app niet kan worden gebouwd). Wanneer ik C functiontoevoeg in Objective-C's .m file, maar vergat dit te declareren bij .h-bestand.

Other episodes