7
votes

Que signifie la portée des fonctions?

Que signifie la portée des fonctions?

Je comprends la portée des variables. Lorsque nous parlons du champ d'application des fonctions, est-il référé aux fonctions dans les structures (classes) ou présentées les fonctions normales que nous appelons principale () d'un programme C / C ++? < / p>


3 commentaires

Où avez-vous rencontré ce libellé?


Notez qu'il y a la la portée de la fonction elle-même (où est cet identifiant valide? - Quel est le même que la portée d'une variable) et la portée de la fonction , qui est la portée Pour un autre identifiant renversé par une fonction (une variable définie dans une fonction est valide entre { et } ).


@sbi, bon point, les bonnes réponses ici adressent uniquement la première définition, mais la question pourrait être de l'autre.


4 Réponses :


1
votes

Je pense que ce que l'on entend ici, c'est la portée dans laquelle étiquettes (A étiquette est ce que vous utilisez avec goto Les instructions) sont visibles.

Peut-être Cet article pourrait également vous aider à comprendre les champs. Vous pouvez également jeter un coup d'œil sur Cette question sur Stackoverflow.


2 commentaires

Celui-ci vous référez est la «portée de la fonction» et non la portée des fonctions.


@Felicepollano, désolé, j'ai mal compris la question.



7
votes

Les fonctions peuvent avoir une classe mondiale, de noms, de classe (généralement appelées membres dans cette affaire) ou de la portée locale (dans une autre fonction). Ils peuvent également être statique leur donnant un lien interne ou dans un espace de noms anonyme, ce qui les rend inaccessibles en dehors d'une unité de traduction (tout en ayant encore une liaison externe afin de pouvoir utiliser les paramètres de modèle).


2 commentaires

Merci, je me suis sentie avec le tien, la réponse de Jerry Coffin est complète


Cela ne répond pas à la question. Nulle partez-vous que vous mentionnez quelle application réellement signifie - seules les fonctions de la portée peuvent avoir.



8
votes

Loely Parlant, une portée est une région dans laquelle les noms peuvent être déclarés. Les noms déclarés dans une portée sont accessibles dans cette portée et, dans certaines circonstances, également de l'extérieur.

(Pour être pédantiquement précis, c'est en fait une région de déclaration et la portée d'un nom correspond à la partie du programme dans lequel le nom est valide. Il commence là où il est déclaré et inclut le reste de cette région et, parfois, d'autres régions.)

Les étanches sont introduites par des espaces de noms, des classes et des instructions composées (c'est-à-dire des blocs des instructions de code entourés de {} ). Le dernier comprend les corps des fonctions.

La plupart des objets et fonctions ont des noms et chacun de ces noms est dans une portée.

de sorte que "la fonction d'une fonction" pourrait signifier deux choses: soit la portée définie par le corps de la fonction, dans laquelle ses variables locales sont déclarées; ou la portée (une classe ou un espace de noms) dans laquelle le nom de la fonction est déclaré.

Mise à jour: vous dites que vous voulez dire la portée du nom de la fonction. Cela commence toujours immédiatement après la déclaration; où cela se termine dépend de la mesure où cette déclaration était.

  • Si cela est déclaré à l'intérieur d'un espace de noms, cela dure jusqu'à la fermeture de l'espace de noms. Si l'espace de noms est rouvert plus tard dans la même unité de traduction, il y retourne dans la portée.
  • S'il est déclaré dans une définition de classe en tant que fonction membre, la portée dure jusqu'à la fin de la définition de la classe. Il est également de périmètre dans les définitions de toutes classes dérivées, ainsi qu'à l'intérieur des définitions du membre de cette classe ou des classes dérivées.
  • Si cela est déclaré dans une définition de classe comme ami ou à l'intérieur d'une définition de la fonction, le nom est effectivement déclaré dans l'espace de noms environnant et que la portée est la même que celle de cette affaire.

9 commentaires

Une portée ne signifie-t-elle que une région où les noms peuvent être accessibles , c'est-à-dire une portée peut parcourir plusieurs blocs par exemple. Au moins une portée d'une variable commence au point où elle est déclarée.


@unkUnunkulu: Techniquement, sa région dans laquelle le nom est valide et je l'utilise légèrement pour se référer à une région de déclaration . Je verrai si je peux rendre la réponse un peu plus correcte sans devenir trop compliquée.


Ouais, mauvaise formulation de moi, mon point principal est que le mot "déclaré" n'est pas correct à 100% non plus.


Merci, je voulais dire la portée dans laquelle le nom de la fonction déclarée comme vous l'avez mentionné


@Swathiappari: Ok, j'ai donné plus de détails à ce sujet.


"Parfois, d'autres régions." Comment??


@DonLarynx: Les espaces de noms peuvent être fermés et rouverts, de sorte que leur portée puisse couvrir plusieurs régions. La portée de la classe couvre la définition de la classe et les définitions des fonctions des membres et des classes imbriquées.


S'il vous plaît définir la région? Comment est-ce différent de la portée?


@DonLarynx Une région de déclaration est une région unique contiguë dans laquelle les déclarations peuvent apparaître. Une portée est un ensemble de régions peut-être non contiguelles dans lesquelles les noms déclarés sont accessibles. Voir la norme si vous souhaitez les définitions précises.



3
votes

Oui, les fonctions ont une portée aussi, bien que leur portée soit généralement plus grande que celle de la plupart des variables.

in c [EDIT: qui était l'une des balises lorsque j'ai écrit cela], des fonctions ont une portée ou un fichier global. portée. La portée globale s'applique à une fonction normale visible dans tout le programme. La portée du fichier s'applique à une fonction que vous avez marquée comme "statique", elle n'est donc visible que dans la même unité de traduction.

C ++ utilise des noms légèrement différents pour ceux-ci, mais ont les mêmes concepts de base. Il ajoute des espaces de noms sous la forme des objets nommés «espace de noms» et struct S / classe es. À une exception près, une fonction dans un espace de noms n'est visible que dans cet espace de noms. L'exception est si vous définissez une fonction ami à l'intérieur d'un classe / struct : xxx

Dans ce cas, même si la fonction est définie à l'intérieur de x , son nom est injecté dans l'espace de noms environnant afin qu'il soit visible en dehors de x.


0 commentaires