Waarom een waarschuwing van “controle bereikt einde van niet-ongeldige functie” voor de hoofdfunctie?

Ik voer de volgende C-codes uit en kreeg een waarschuwing: controle bereikt einde van niet-ongeldige functie

int main(void) {}

Heeft u suggesties?


Antwoord 1, autoriteit 100%

Zet gewoon return 0in je main(). Uw functie main retourneert een int (int main(void)) en daarom moet u een return aan het einde ervan toevoegen.

Control bereikt het einde van een niet-ongeldige functie

Problem: I received the following warning:

waarschuwing: controle bereikt einde van niet-ongeldige functie

Oplossing: deze waarschuwing is vergelijkbaar met de waarschuwing die wordt beschreven in Return with no value. Als de besturing het einde van een functie bereikt en er geen return wordt gevonden, gaat GCC uit van een return zonder returnwaarde. Hiervoor heeft de functie echter een retourwaarde nodig. Voeg aan het einde van de functie een return-instructie toe die een geschikte retourwaarde retourneert, zelfs als de controle daar nooit komt.

bron

Oplossing:

int main(void)
{
    my_strcpy(strB, strA);
    puts(strB);
    return 0;
}

Antwoord 2, autoriteit 60%

Als alternatief voor de voor de hand liggende oplossing van het toevoegen van een return-instructie aan main(), kunt u een C99-compiler gebruiken (“gcc -std=c99” als u gebruiken GCC).

In C99 is het legaal voor main()om geen return-instructie te hebben, en dan retourneert de laatste }impliciet 0.

$ gcc -c -Wall t.c
t.c: In function ‘main’:
t.c:20: warning: control reaches end of non-void function
$ gcc -c -Wall -std=c99 t.c
$ 

Een opmerking die puristen belangrijk zouden vinden: u moet nietde waarschuwing corrigeren door main()te declareren als terugkerend type void.


Antwoord 3, autoriteit 15%

De hoofdfunctie heeft een return-type van int, zoals aangegeven in

int main(void)

maar uw hoofdfunctie retourneert niets, het sluit na

puts(strB);

Toevoegen

return 0;

daarna en het zal werken.

Other episodes