web-dev-qa-db-fra.com

Nombre maximum de paramètres dans la déclaration de fonction

Je sais que le nombre minimum de paramètres dans la définition de la fonction est zéro, mais quel est le nombre maximal de paramètres dans la définition de la fonction? Je pose la question juste pour des connaissances et de la curiosité, pas que je vais écrire une vraie fonction.

27
Nawaz

Oui, il y a des limites imposées par la mise en œuvre. Votre réponse est donnée dans le texte audacieux de l'extrait suivant de la norme C++.

1. Langue C++


Annexe B - Quantités de mise en œuvre

  1. Étant donné que les ordinateurs sont finis, les implémentations C + + sont inévitablement limitées dans la taille des programmes qu'ils peuvent traiter avec succès. chaque mise en œuvre doit documenter ces limitations si connues. Cette documentation peut citer des limites fixes lorsqu'elles existent, disent comment calculer des limites variables en fonction des ressources disponibles ou dire que les limites fixes n'existent pas. .

  2. Les limites peuvent limiter les quantités qui incluent ceux décrits ci-dessous ou d'autres. Le nombre de crochets suivant chaque quantité est recommandé comme le minimum de cette quantité. Cependant, ces quantités ne sont que des directives et ne déterminent pas la conformité.
    [.____] - NIVEAUX NIVEAUX D'ÉTATS COMPOSÉS, STRUCTURES DE CONTRÔLE D'ITERATION ET STRUCTURES DE COMMANDE DE SÉLECTION [256].
    [.____] - Niding Niveaux d'inclusion conditionnelle [256].
    - Déclarateurs de pointeur, de tableau et de fonction (dans n'importe quelle combinaison) modifiant un type arithmétique, structure, union ou incomplet dans une déclaration [256].
    [.____] - Niding Niveaux d'expressions entre parenthèses dans une expression complète [256].
    - Nombre de caractères dans un identifiant interne ou un nom de macro [1 024].
    [.____] - Nombre de caractères dans un identifiant externe [1 024].
    - identificateurs externes dans une unité de traduction [65 536].
    - identificateurs avec une portée de bloc déclarée dans un bloc [1 024].
    [.____] - identificateurs de macro définis simultanément dans une unité de traduction [65 536].
    [.____] - Paramètres dans une définition de fonction [256].
    [.____] - Arguments dans une seule fonction Call [256].

    - Paramètres dans une définition macro [256].
    [.____] - Arguments dans une invocation macro [256].
    - Caractères dans une ligne source logique [65 536].
    - caractères dans une chaîne de caractères littéral littéral ou large (après la concaténation) [65 536].
    - Taille d'un objet [262 144].
    [.____] - NIVEAUX NIVEAUX POUR #Incluez les fichiers [256].
    - Étiquettes de cas pour une instruction de commutation (à l'exclusion de celles de toutes les instructions de commutation imbriquées) [16 384].
    [.____] - Membres de données dans une seule classe, structure ou union [16 384].
    - Constantes de dénombrement dans une seule énumération [4 096].
    [.____] - Les niveaux de classes, de structure ou d'union imbriquées dans une liste de déclarations de structure unique [256].
    - Fonctions enregistrées par atexit () [32].
    [.____] - Classes de base directes et indirectes [16 384].
    [.____] - Classes de base directe pour une seule classe [1024].
    [.____] - Membres déclarés dans une seule classe [4 096].
    [.____] - Fonctions virtuelles primordiales finales dans une classe, accessible ou non [16 384].
    [.____] - Bases virtuelles directes et indirectes d'une classe [1 024].
    [.____] - membres statiques d'une classe [1 024].
    [.____] - Déclarations d'amis dans une classe [4 096].
    [.____] - Déclarations de contrôle d'accès dans une classe [4 096].
    - Initializers membres dans une définition du constructeur [6 144].
    [.____] - Calendrier des qualifications d'un identifiant [256].
    [.____] - Spécifications externes imbriquées [1 024].
    - Arguments de modèle dans une déclaration de modèle [1 024].
    [.____] - des instantanations de modèle recouvertes de [17].
    - gestionnaires par bloc d'essai [256].
    [.____] - Spécifications de lancer sur une déclaration de fonction unique [256].

En outre, il dit également en 18,3 $/6,

Limites de mise en œuvre : La mise en œuvre doit prendre en charge l'enregistrement d'au moins 32 fonctions.

44
Nawaz

2. langage C


5.2.4.1 Limites de traduction


La mise en œuvre doit être en mesure de Traduire et exécuter à moins un programme qui contient au moins une instance de chacun des limites suivantes:
[.____] - 127 Nivres de blocs de blocs
[.____] - 63 NIVEAUX NIVEAUX D'INCLUSION CONDIATEUR
[.____] - 12 déclarateurs de pointeur, de tableau et de fonction (dans toutes les combinaisons) modifiant une arithmétique, une structure, un syndicat ou un type incomplet dans une déclaration
[.____] - 63 NIVEAUX NIVEAUX DE CRÉDATATORATÉS PARTHÉTÉSIQUES DANS UNE DÉCLARATEUR COMPLET
[.
[.____] - 63 caractères initiaux importants dans un identifiant interne ou un nom de macro (chaque nom de caractère universel ou caractère de source étendue est considéré comme un seul caractère)
[.____] - 31 caractères initiaux significatifs dans un identifiant externe (chaque nom de caractère universel
Spécification d'un identifiant court de 0000ffff ou moins est considéré comme 6 caractères, chaque nom de caractère universel spécifiant un identifiant court de 00010000 ou plus est considéré comme 10 caractères et que chaque caractère source étendu est considéré comme le même nombre de caractères que le même nombre de caractères Nom de caractère universel, le cas échéant)
[.____] - 4095 identificateurs externes dans une unité de traduction
[.____] - 511 identifiants avec une portée de bloc déclarée dans un bloc
[.____] - 4095 identifiants de macro définis simultanément dans une unité de traduction de prétraitement
[.____] - 127 paramètres dans une définition de fonction
- 127 arguments dans une seule fonction

[.____] - 127 paramètres dans une définition macro
[.____] - 127 arguments dans une invocation macro
[.____] - 4095 caractères dans une ligne source logique
[.____] - 4095 caractères dans une chaîne de caractères littéral littéral ou large (après la concaténation)
[.____] - 65535 octets dans un objet (dans un environnement hébergé uniquement)
[.____] - 15 Niveaux de nidification pour les fichiers #inclus
[.____] - 1023 étiquettes de cas pour une instruction de commutation (à l'exclusion de celles de toutes les instructions de commutation imbriquées)
[.____] - 1023 membres dans une seule structure ou union
[.____] - 1023 constantes de dénombrement dans une seule énumération
[.____] - 63 Lev els de structure imbriquée ou de définitions syndicales dans une seule liste de déclarations de structure

Cependant, il dit dans les notes que,

13) Les implémentations devraient éviter d'imposer des limites de traduction fixes dans la mesure du possible.

24
Nawaz

Bien sûr, si vous écrivez une fonction en C avec un si grand nombre d'arguments, vous probablement Voulez repenser la conception de votre programme.

4
Sri Raghavan