Affectation de tableaux en C et C : exception pour les structures et les idées philosophiques
En C et C, l'attribution directe de tableaux est interdite, comme illustré par ce qui suit :
int num1[3] = {1,2,3}; int num2[3]; num2 = num1; // Error: invalid array assignment
Cependant, une exception survient lorsque les tableaux sont des composants de structs :
struct myStruct { int num[3]; }; struct myStruct struct1 = {{1,2,3}}; struct myStruct struct2; struct2 = struct1;
Dans ce cas, les tableaux dans les structures peuvent être attribués par membre. Cela soulève la question de savoir pourquoi l'affectation de tableaux par membres est prise en charge pour les structures, mais pas généralement.
Raison d'être évolutive
Les origines du comportement des tableaux résident dans le développement historique de C. Dans B et BCPL, les tableaux étaient implicitement traités comme des pointeurs non typés. Les structures en B nécessitaient un traitement spécial pour s'adapter aux tableaux, ce qui conduisait à ce que les tableaux au sein des structures soient traités comme des entités suivies par le compilateur.
Cela nécessitait d'interdire l'affectation de tableaux en général, car cela aurait nécessité une réévaluation du pointeur de base du tableau. Pour maintenir la compatibilité, l'affectation de tableaux a été interdite même pour les tableaux au sein des structures.
Affectation de structure et effets secondaires
Lorsque l'affectation de structure a été introduite en C, elle a été implémentée en tant que simple mémoire de la mémoire brute de la structure. Ce comportement d'affectation s'est étendu par inadvertance aux tableaux au sein des structures.
Comme l'affectation de structure faisait déjà partie du langage, toute tentative de modification du comportement d'affectation de tableau aurait pu casser le code existant. Par conséquent, l'affectation de tableaux au sein des structures reste une exception, bien que involontaire.
Perspective philosophique
Du point de vue de la conception du langage, on pourrait affirmer que les tableaux, contrairement les structures, n’ont jamais été conçues comme des citoyens de première classe. Leur fonctionnalité en tant que pointeurs donnait la priorité à la rétrocompatibilité plutôt qu'aux avantages ergonomiques potentiels.
De plus, l'introduction de l'affectation générale des tableaux aurait introduit des complications, telles que la possibilité de créer accidentellement des pointeurs et des fuites de mémoire.
Conclusion
La prise en charge de l'affectation de tableaux par membres dans les structures est un artefact historique issu des premières évolutions de C. Il a persisté en raison de problèmes de compatibilité et sert de rappel de la philosophie de conception fondamentale du langage consistant à donner la priorité à la simplicité et à la compatibilité ascendante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!