Que signifie “déclaration implicite de fonction”?

#include  int main() { int a = 4; int b = 3; addNumbers(a, b); } int addNumbers(int a, int b) { return a + b; } 

Pourquoi cela ne comstack-t-il pas, je reçois un message disant la déclaration implicite de la fonction addNumbers() ?

Définissez la fonction avant main() ou fournissez son prototype avant main() .

Donc soit faire ceci:

 #include  int addNumbers(int a, int b) { //definition } int main() { //Code in main addNumbers(a, b); } 

ou ca:

 #include  int addNumbers(int, int); int main() { //Code in main addNumbers(a, b); } int addNumbers(int a, int b) { // definition } 

Vous devez déclarer la fonction avant de l’appeler dans main (). Soit le déplacer avant main ou au moins le déclarer là. En outre, vous devriez probablement append un return 0 à la fin de la fonction principale car elle est supposée renvoyer int .

 #include  int addNumbers(int a, int b) { return a + b; } int main() { int a = 4; int b = 3; addNumbers(a, b); return 0; } 

Vous devez soit déplacer la fonction addNumber() entière au-dessus de main ou fournir un prototype. Ce dernier est fait de la manière suivante:

 int addNumbers(int a, int b); int main() { // code of main() here } int addNumbers(int a, int b) { //code of addNumbers() here } 

Mettez addNumbers avant main

 int addNumbers(int a, int b) { return a + b; } int main() { int a = 4; int b = 3; addNumbers(a, b); } 

MISE À JOUR :

Pour l’imprimer, printf("%i",addNumbers(a, b)); affichera 7 dans le cas ci-dessus.

Vous pouvez déplacer la fonction entière au-dessus du point où elle est appelée, ou utiliser un prototype de fonction, comme ceci:

 #include  int addNumbers(int a, int b); // function prototype int main() { int a = 4; int b = 3; addNumbers(a, b); } int addNumbers(int a, int b) { return a + b; } 

Vous aurez besoin d’une déclaration forward de la fonction addNumbers ou de sa définition déplacée avant la première utilisation:

 // 2161304 #include  // forward declaration int addNumbers(int a, int b); int main() { int a = 4; int b = 3; addNumbers(a, b); } // alternatively move this up before main ... int addNumbers(int a, int b) { return a + b; } 

En ce qui concerne main et return :

Les programmes comstackront sans. Les signatures de main définies par la norme sont:

 int main(void) int main(int argc, char **argv) 

Il existe trois valeurs de retour portables:

 0, EXIT_SUCCESS, EXIT_FAILURE 

qui sont définis dans stdlib.h .

Déclarez la fonction avant de l’utiliser en ajoutant un prototype avant main ():

 int addNumbers(int a, int b); 

ou déplacez la fonction addNumbers entière avant main ().

Je suis d’accord avec la déclaration et la définition, mais je ne reçois aucune erreur de compilation avec le code ci-dessus. Ma version de gcc est “4.4.1-4ubuntu9”. Toutes les idées.

J’ai fait une petite modification pour tester le code.

  #include  int main() { int a = 4; int b = 3; printf("%d", addNumbers(a, b)); // Printf added. } int addNumbers(int a, int b) { return a + b; } 

si votre compilateur est au standard C99, il génère une erreur et une “déclaration implicite”, car la promotion par défaut est obsolète en standard C99. si vous essayez de comstackr avec le standard C89, cela sera autorisé.

En C99, le prototype de fonction standard est nécessaire

Étant donné que le compilateur exécute une ligne après l’autre, il doit disposer des informations sur la fonction appelée par la fonction principale avant de voir l’appel de fonction. Afin que mon ami puisse en informer le compilateur avant que vous ne puissiez jamais utilise le.

Vous devez déclarer la fonction avant d’utiliser. Rappelez-vous ces 4 éléments de base lorsque vous utilisez des fonctions

  1. Déclaration
  2. Appel
  3. Définition
  4. Revenir