est "struct struct" juridique? En termes de normes et (séparé des normes) en Gcc?C90 - C99: structure du registre
Répondre
Oui. (Pas de citation, il n'y a tout simplement pas d'interdiction, il y a une note supposant que l'utilisation de registre avec des tableaux est valide, et les tableaux sont beaucoup plus des citoyens de seconde classe dans C qui structure).
Oui, c'est légal, mais comme le registre n'est qu'un indice pour le compilateur sur ce qu'il pourrait essayer, aucune implémentation ne doit en fait l'écouter quand même. Il est également facile de créer une structure qui ne pourrait pas être stockée dans l'espace alloué dans les registres. Une fois que vous commencez à vous rapprocher des problèmes dépendants de la machine, leur rôle dans les normes tend à être simplement des suggestions car le matériel varie de sorte que les mêmes choses ne sont pas fiables à ce niveau dans toutes les architectures.
Oui c'est valide.
register
en tant que mot-clé ne signifie simplement pas que la variable doit être conservée dans un registre. (C n'a fondamentalement pas de concept pour cela). Cela signifie simplement ne pas prendre une adresse de cette variable.
Dommage que 'register 'impose des violations de contraintes, car autrement il aurait été plus utile d'avoir le mot-clé mean" La valeur de cette lvalue ne changera pas entre ses accès sauf si son adresse est prise * entre ces deux accès *. ". Étant donné quelque chose comme 'registre x, y; getCoords (&x,&y);) le compilateur devrait stocker les 'x' et' y' en mémoire lors de l'appel de 'getCoords', mais pourrait les mettre en cache dans les registres par la suite.Utiliser pour l'optimisation, et quelque chose qu'un compilateur ne pourrait probablement pas comprendre Dommage que le Standard considère que ... – supercat
... une violation de contrainte – supercat
@supercat, vous en avez vraiment creusé un ancien, non, comme vous le dites, il vaut mieux laisser ce type d'optimisation le compilateur, je pense. 'register' tel qu'il est en réalité est seulement un marqueur pour * Je ne veux pas que cette variable soit alias, jamais *, et peut être très utile en combinaison avec la qualification' const' –