¿Qué extraña sintaxis de C es esta? [duplicate]

3 minutos de lectura

¿Que extrana sintaxis de C es esta duplicate
kevin boyd

Posibles duplicados:

Declaraciones de variables C después del encabezado de función en la definición
¿Qué tiene de útil esta sintaxis de C?

Traté de entender algo de código C y encontré esto donde las variables se declaran entre el encabezado de la función y la primera llave.

¿Alguna idea de cuáles son estas variables?
¿Son locales o globales?

¿Qué pretende hacer 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

        }

  • Esta es en realidad la forma original de declarar tipos de parámetros de funciones. Recoja una copia de K&R para leer los detalles.

    – usuariolinux27

    7 de diciembre de 2010 a las 19:11

  • Ver stackoverflow.com/questions/1630631/…

    – kennytm

    7 de diciembre de 2010 a las 19:12

1646970486 498 ¿Que extrana sintaxis de C es esta duplicate
término

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

Para obtener una explicación bastante larga pero muy informativa, consulte la sintaxis alternativa (K&R) C para la declaración de funciones frente a los prototipos

  • Y están obsoletos (¿o eliminados por completo? Lo olvidé…) en la última versión del estándar.

    – R.. GitHub DEJA DE AYUDAR A ICE

    7 de diciembre de 2010 a las 19:15

  • Posiblemente. Traté de buscarlo en Google para poder incluirlo en esta respuesta, pero no pude encontrarlos.

    – terminal

    7 de diciembre de 2010 a las 19:18

  • ¿Qué pasa con “doublereal”? ¿Hay algún equivalente para ese tipo en C#, o puedo usar double por ahora?

    –Kevin Boyd

    8 de diciembre de 2010 a las 5:29

  • @KevinBoyd: doublereal es casi seguro que solo un typedef para double. Es un Fortran-ismo, y a menudo lo ves en código C que se convirtió de Fortran. ídem para integer.

    – Esteban Canon

    8 de diciembre de 2010 a las 5:34


Esas 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 un código heredado antiguo, ¿realmente existía void como palabra clave en ese entonces?

  • Eso lo explica. Estaba un poco confundido por la palabra clave void, pero parece que los compiladores más antiguos también la admitían.

    – una masa

    8 de diciembre de 2010 a las 6:53

Esa es una declaración de estilo K&R, y es cómo se escribió C hace 30 años (todavía se admite, pero está en desuso en C99; creo que se eliminará en C1x). Por el aspecto de los tipos, es probable que el código se haya convertido de Fortran, así que quién sabe cuántos años tenía el original.

Sin embargo, no es estrictamente K&R original, debido a la presencia de void.

En C “moderno”, 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
}

  • +1 para la historia del tema!

    –Kevin Boyd

    8 de diciembre de 2010 a las 5:22

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad