Maison >développement back-end >C++ >Pourquoi les signatures de fonctions C et C autorisent-elles des longueurs de tableau qui n'ont aucun effet ?

Pourquoi les signatures de fonctions C et C autorisent-elles des longueurs de tableau qui n'ont aucun effet ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 03:10:17333parcourir

Why Do C and C   Function Signatures Allow Array Lengths That Have No Effect?

Longueurs de tableau dans les signatures de fonction : une anomalie déroutante

En C et C, les signatures de fonction incluent souvent des longueurs de tableau entre crochets, telles que comme dans l'exemple :

int dis(char a[1])
{
    int length = strlen(a);
    char c = a[2];
    return length;
}

Cependant, cette syntaxe semble n'avoir aucun effet pratique, comme l'illustre le fait que le code ci-dessus accède avec succès aux éléments au-delà de la longueur déclarée du tableau. Cela soulève la question : pourquoi les compilateurs autorisent-ils cette notation apparemment redondante ?

La réponse réside dans les détails d'implémentation de la gestion des tableaux en C et C . Un tableau en C et C est une adresse pointant vers le premier élément du tableau. Lorsqu'un tableau est transmis à une fonction, son adresse est copiée, passant ainsi un pointeur.

Dans l'exemple ci-dessus, la fonction dis prend un tableau de caractères a avec une longueur déclarée de 1. Cependant, puisque les tableaux sont passés sous forme de pointeurs, la spécification de longueur n'est pas pertinente et la fonction peut accéder à n'importe quel élément du tableau, même si l'index dépasse la longueur déclarée.

Cette incohérence dans la syntaxe des paramètres a été un fait l’objet de débats depuis des décennies depuis son introduction aux débuts de ces langues. Alors que certains ont plaidé en faveur d'une syntaxe plus cohérente, d'autres ont cité la compatibilité avec le code existant comme raison pour maintenir le comportement actuel.

Malgré la confusion qu'elle peut provoquer, la tolérance des tableaux avec des longueurs non spécifiées dans les signatures de fonction est un sous-produit de l'implémentation basée sur des pointeurs de tableaux en C et C . Il sert à rappeler les nuances subtiles qui peuvent naître de l'interaction entre différentes caractéristiques du langage.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn