[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