2010-12-07 39 views
5

duplicados posibles:
C variable declarations after function heading in definition
What is useful about this C syntax?¿Qué sintaxis extraña de C es esta?

que tratar de entender algo de código C y encontré este, donde las variables se declaran entre la cabeza de la función y el primer aparato ortopédico.

¿Alguna idea de qué son estas variables?
¿Son locales o globales?

¿Qué hace el autor aquí?

void someFunction (m_ptr, n_ptr, params, err) 
      integer *m_ptr;  /* pointer to number of points to fit */ 
      integer *n_ptr;  /* pointer to number of parameters */ 
      doublereal *params;  /* vector of parameters */ 
      doublereal *err;  /* vector of error from data */ 
     { 
      //some variables declared here 
      int  i; 
      ... 
      ... 

      //body of the function here 

     } 
+5

Esto es en realidad la forma original de declarar los tipos de parámetros de función. Recoja una copia de K & R para leer los detalles. – linuxuser27

+2

Ver http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntax – kennytm

Respuesta

7

Ellos son argumentos de la función. Esta es una forma alternativa de declararlos. Funcionan de la misma manera que los argumentos normales.

Por un tiempo bastante largo, pero muy informativo explicación ver Alternative (K&R) C syntax for function declaration versus prototypes

+0

Y están en desuso (o eliminado por completo? Se me olvida ...) en la última versión de la norma . –

+0

Posiblemente. Traté de googlearlo para poder incluirlo en esta respuesta, pero no pude encontrarlos. – terminus

+0

¿qué tal "doblereal" hay algún equivalente para ese tipo en C#, o puedo simplemente usar el doble por ahora? –

3

Estas variables son una declaración de los argumentos. No estoy seguro de por qué alguien usa ese estilo más. Sin embargo, esos tipos deben ser typedef.

Si este es el código heredado anterior, ¿el vacío realmente existía como palabra clave en ese momento?

+0

Es un código viejo 15yr + –

+0

Eso lo explica. Estaba un poco confundido por la palabra clave void, pero parece que los compiladores más antiguos también lo admiten. – onemasse

2

Esa es una declaración de estilo R de K &, y así es como se escribió C hace 30 años (todavía es compatible, pero obsoleto en C99; creo que se eliminará en C1x). Por la apariencia de los tipos, el código probablemente se convirtió de Fortran, así que quién sabe cuántos años tenía el original.

No es estricto original K & R, sin embargo, debido a la presencia de void.

En "moderna" C, que se vería así:

void someFunction (integer *m_ptr, integer *n_ptr, 
        doublereal *params, doublereal *err) 
{ 
    //some variables declared here 
    int  i; 
    ... 
    ... 

    //body of the function here 
} 
+0

+1 para la historia del tema! –

Cuestiones relacionadas