Je suis venu dans du code C qui compile, mais je ne comprends pas pourquoi. Plus précisément, j'ai une bibliothèque C qui a beaucoup de code à l'aide de ce format:
void get_xu_col(int i_start,
int n,
double x[n],
int n_x,
int n_u,
int n_col,
double xu_col[n_col][n_x + n_u]){
...
}
int main(){
...
double xu_col[n_col][n_x + n_u];
get_xu_col( ..., xu_col );
...
}
Ce que je ne comprends pas, c'est pourquoi le compilateur permet de dimensionnement dans les tableaux. Au mieux de ma compréhension, soit la taille doit être fixe (par exemple, xu_col[9][7]
) ou non (par exemple, xu_col[][]
). Dans le code ci-dessus, il apparaît que les tailles ne sont pas des constantes de compilation.
Est le compilateur simplement ignorer les arguments ici? ou est-il vraiment en train de faire au moment de la compilation vérifier les dimensions?
Si c'est la dernière, alors il semble enclin à l'erreur de passer les dimensions séparément.
La deuxième partie de la question est la suivante:
Pourquoi n'est pas la même version en C++? Quand j'ai littéralement changer l'extension du fichier de .c
de .cpp
et d'essayer de recompiler, je reçois
candidate function not viable: no known conversion from 'double [n_col][n_x + n_u]' to 'double (*)[n_x + n_u]' for 7th argument
void get_xu_col(int i_start, int n, double x[n], int n_x, int n_u, int n_col, double xu_col[n_col][n_x + n_u]);
Je voudrais savoir dans quel idiome que je devrais utiliser pour convertir ce code en C++, car apparemment la précédente idiome était quelque chose qui fonctionne en C, pas du C++.