valores una todas tipos retornan que parametros llamar lenguaje las funciones funcion estructura ejemplos con como c++ c matrix semicolon

c++ - una - tipos de funciones en c



Semicolon en mis parámetros de función en C (2)

Es una característica poco utilizada de la extensión C99 GNU ( documentación de GCC ) que se utiliza para reenviar-declarar los parámetros utilizados en los declaradores de VLA.

matrix_* matrix_insert_values(int n; double a[][n], int m, int n);

¿Ves cómo int n aparece dos veces? La primera int n; es solo una declaración directa de la int n real, que está al final. Tiene que aparecer antes del double a[][n] porque n se usa en la declaración de a . Si está de acuerdo con la reorganización de los parámetros, puede poner n antes de a y luego no necesitaría esta función

matrix_* matrix_insert_values_rearranged(int m, int n, double a[][n]);

Nota sobre compatibilidad C ++

Para que quede claro, la extensión GNU es solo la declaración directa de los parámetros de la función. El siguiente prototipo es estándar C:

// standard C, but invalid C++ matrix_* matrix_insert_values_2(int m, int n, double a[][n]);

No puede llamar a esta función desde C ++, porque este código usa matrices de longitud variable, que no son compatibles con C ++. Debería reescribir la función para poder llamarla desde C ++.

matrix_* matrix_insert_values(int n; double a[][n], int m, int n) { matrix_* x = matrix_new(m, n); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) x->v[i][j] = a[i][j]; return x; }

Ejemplo de mi matriz de prueba

double in[][3] = { { 12, -51, 4}, { 6, 167, -68}, { -4, 24, -41}, { -1, 1, 0}, { 2, 0, 3}, };

Estoy un poco perdido, no puedo entender qué es "int n" dentro de mi declaración de argumento, funciona sobre C pero C ++ no permite esta implementación. Quiero entender cómo funciona esto porque voy a migrar este código a c ++. Gracias


Si así es como lo llamas desde C siempre (es decir, con n y m corregidos en tiempo de compilación), entonces en C ++ puedes hacer:

template <int N, int M> void matrix_insert_values(const double (&a)[M][N]); int main() { double in[5][3] = { { 12, -51, 4}, { 6, 167, -68}, { -4, 24, -41}, { -1, 1, 0}, { 2, 0, 3}, }; matrix_insert_values(in); };

que tiene N y M como parámetros de plantilla y estos se deducen automáticamente en tiempo de compilación a partir de la entrada que se pasa a la función.