La ligne de code suivante, ce qui crée un tableau de longueur variable sur la pile:Initializing VLA
char name[cpfs_params(cfdata->cpfs)->namemax + 1] = {'\0'};
génère les diagnostics du compilateur suivants:
src/mount.cpfs/cpfsfuse.c:179: error: variable-sized object may not be initialized
src/mount.cpfs/cpfsfuse.c:179: warning: excess elements in array initializer
src/mount.cpfs/cpfsfuse.c:179: warning: (near initialization for ‘name’)
Quelles sont les options disponibles pour moi pour initialiser VLA? Suis-je obligé d'utiliser une ligne telle que:
memset(name, 0, sizeof(name));
À la place?
Pourquoi je ne peux pas le faire dans la même ligne? –
@Matt Joiner: C'est juste une contrainte de la langue - j'ai ajouté le texte pertinent de la norme à ma réponse. – caf
Je pense que c'est pour éviter les cas de bordure comme ceci: int arr [foo] = {1,2,3}; où foo pourrait être 1 ou 2. Que se passe-t-il alors? : p Et pour le rendre simple {0} est également interdit, mais je ne suis pas sûr. – Maister