[C con Clase] no entiendo el error
Steven Davidson
steven en conclase.net
Jue Jun 28 13:19:20 CEST 2007
Hola Fabio,
El pasado 2007-06-28 10:52:49, fabio escribió:
f> hola a todos , una consulta alguien puede decirme porque en la parte en azul me da el sig. error cunado compilo?:
f> "18 C:\Dev-Cpp\main.c [Warning] static declaration of 'media' follows non-static declaration"
f>
f> gracias.
f>
Veamos el código fuente.
f> #include <stdio.h>
f> #include <stdlib.h>
f> int main()
f> {
f> float lista[100];
f> float med;
f> int n;
f> float media(int n, float lista[]);
f> void desvio(int n, float lista[], float med);
Esto es posible, pero es atípico.
f> printf("cuantos num para calcular la media? ");
f> scanf("%d",&n);
f> printf("\n");
f> med= media(n,lista);
f> desvio(n, lista, med);
f>
f> float media(int n, float lista[])
Esto no es correcto. No puedes definir funciones localmente; siempre deben ser globales. Las declaraciones pueden ser locales a una función, pero sus implementaciones han de quedar fuera del ámbito de una función. En otras palabras, no puedes definir una función dentro de la definición de otra.
f> {
f> int cont;
f> float suma, media;
f> for (cont=0; cont< n; ++cont) {
f> printf("i = %d x= ", cont+1);
f> scanf("%f", &lista[cont]);
f> suma += lista[cont];
f> }
f>
f> return(suma/n);
No es necesario escribir paréntesis.
f> }
f> void desvio( int n, float lista[], float med)
Nuevamente, no puedes anidar definiciones de funciones.
f> {
f> int cont;
f> for (cont=0; cont<n; ++cont) {
f> d= lista[cont] - med;
Esto es un error, ya que 'd' no ha sido declarada.
f> printf ("i = %d x= %5.2f\n", cont+1, lista[cont], d);
f> }
f> return;
No es necesario escribir 'return', ya que las funciones en C/C++ siempre regresan al finalizar su ámbito.
De todas maneras, tienes un error, ya que no cierras la llave de la implementación de esta función.
f> system("PAUSE");
f> return 0;
f> }
El esquema de tu programa quedaría así:
int main()
{
float media( int n, float lista[] );
void desvio( int n, float lista[], float med );
...
}
float media( int n, float lista[] )
{
...
}
void desvio( int n, float lista[], float med )
{
...
}
Espero que esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase