2010-01-29 36 views
17
#include <stdio.h> 

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

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

¿Por qué no se compila esto, aparece un mensaje que dice la declaración implícita de la función addNumbers()?¿Qué significa "declaración implícita de la función"?

+0

Además de declarar addNumbers las funciones antes de principal, aquí están mis 2 centavos sobre el estilo de C (no aplicable para C++): 1) la función que no tiene parámetros debe tener signatura (void) - y por lo tanto 'int main (void)'; 2) main debe devolver el valor en C - por lo tanto 'return 0' es obligatorio. –

+0

entonces, ¿cómo podría imprimirlo entonces, ya que cuando lo ejecuto simplemente no muestra nada, he intentado cambiar desde la principal devolviendo la suma a printf (addNumbers (a, b)); pero en vano – bob

+0

Esa es otra pregunta. También estoy seguro de que puedes encontrar una respuesta si usas search en stackoverflow.com – sharptooth

Respuesta

8

Debe declarar la función antes de llamarla en main(). O moverlo antes de main o al menos declararlo allí. Además, debe agregar return 0 al final de la función principal, ya que se supone que debe devolver int.

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

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

@ruibm: _También, debe prob agregar return 0 al final de la función principal, ya que se supone que debe devolver int_: ** NO ** eso es opcional –

+2

Sí, lo sé, pero es una buena práctica de programación y el el compilador emitirá advertencias si activa el modo pedante. – rui

+0

Más nitpicking, en C es una "función", no un "método". De lo contrario, bien. – Vatine

6

Tienes que sea mover toda la función principal addNumber() anterior o proporcionar un prototipo. Este último se realiza de la siguiente manera:

int addNumbers(int a, int b); 

int main() 
{ 
// code of main() here 
} 

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

addNumbers puesto delante principal

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 

    addNumbers(a, b); 
} 

ACTUALIZACIÓN:

imprimirlo, printf("%i",addNumbers(a, b));7 mostrará en el caso anterior.

19

Defina la función antes de main() o proporcione su prototipo antes de main().

Así que, o hacer esto:

#include <stdio.h> 

int addNumbers(int a, int b) 
{ //definition 
} 

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

o esto:

#include <stdio.h> 

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

int addNumbers(int a, int b) 
{ // definition 
} 
+0

Como nota al margen, ¿las declaraciones de funciones normalmente no se hacen en un archivo .h? – Powerlord

+1

@R. Bemrose: cuando hay más de un archivo fuente, sí. Cuando solo hay un archivo fuente, como aquí, la función debe declararse como una función estática (ya que no es necesario acceder desde ningún otro archivo, ya que solo hay un archivo para compilar). –

1

declarar la función antes de usarlo ya sea agregando un prototipo antes de main():

int addNumbers(int a, int b); 

o mover toda la función addNumbers antes de main().

2

Se puede mover toda la función por encima del punto donde se llama, o utilizar un prototipo de función, así:

#include <stdio.h> 

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; 
} 
+0

El comportamiento no está definido. De acuerdo con las normas: debe declarar la función antes de usar. –

2

usted necesitará una declaración adelantada de la función addNumbers o su definición se trasladó hasta antes del primer uso:

// 2161304 
#include <stdio.h> 

// 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 cuanto main y return:

programas se compilar sin. Las firmas de los principales definidos por la norma son:

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

Hay tres valores de retorno portátiles:

0, EXIT_SUCCESS, EXIT_FAILURE 

que se definen en stdlib.h.

0

si su compilador es estándar C99 arroja y error "declaración implícita", ya que desde la promoción predeterminada es obsoleto en el estándar C99. si intenta compilar con el estándar C89 esto sería permitido.

En C99 prototipo de función estándar es necesaria

0

Desde el compilador ejecuta una línea tras otra, por el tiempo que ve la llamada a la función, tiene que tener la información sobre esa función, que es la función principal calling.so mi amigo necesita decirle al compilador sobre la función antes de poder usarla.

1

Estoy de acuerdo con lo de declaración y definición, pero no estoy obteniendo ningún error de compilación con el código anterior. Mi versión de gcc es "4.4.1-4ubuntu9" .Cualquier idea.

He hecho una pequeña modificación para probar el código.

#include <stdio.h> 

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

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
0

Debe declarar la función antes de usar. Recuerde estas 4 partes básicas al tratar con las funciones.

  1. Declaración
  2. llamada
  3. Definición
  4. Volver
Cuestiones relacionadas