Voir dans un code source de projet J'ai vu la déclaration de Belowows de sorte qu'il déclarer foo comme fonction statique du pointeur de retour sur INT. Alors, ici, je vous demande quel est le but de la déclaration de fonction comme statique? P> p>
5 Réponses :
Il empêche d'autres unités de traduction (fichiers .c) de voir la fonction. Garde les choses propres et bien rangées. Une fonction sans statique code> est
extern code> par défaut (est visible à d'autres modules). P>
déclarer une fonction comme Vous pouvez également relier voir ici pour un exemple. p> statique code> empêche d'autres fichiers d'y accéder. En d'autres termes, il n'est visible que dans le fichier qu'il a été déclaré dans; une fonction "locale". p>
statique code> (mot-clé de déclaration de fonction, non variable) en C comme
privé code> dans des langages orientés objet. P>
La question concerne c . Qu'est-ce qu'une "classe"?
Je suis plus préoccupé par c ... je ne sais pas Classe & C ++
@Keith: Toutes mes excuses - Codage uniquement en Java depuis un mois.
Le nom de la fonction n'est pas visible en dehors de l'unité de traduction (fichier source) dans lequel elle est déclarée et ne sera pas en conflit avec une autre fonction En général, les fonctions doivent probablement être déclarées (Notez que ce n'est que le nom em> qui n'est pas visible. Il peut toujours être appelé de n'importe où dans le programme via un pointeur.) p> foo code> dans un autre fichier source. P>
statique code> sauf si vous n'avez pas besoin de l'appeler à partir d'un autre fichier source. P>
Quelle est la différence entre marquer une fonction en tant que statique et simplement ne pas l'inclure dans l'en-tête? Ne l'omentait pas de l'en-tête a le même effet? Ou, existe-t-il une raison de ne pas mettre quelque chose dans l'en-tête et de ne pas la marquer aussi statique?
@ALEX: y compris sa déclaration dans l'en-tête le rend visible pour le compilateur et, partant, dans d'autres fichiers source qui incluent cet en-tête. Le faire non- statique code> fait son nom visible par rapport à la liaison; D'autres fichiers source peuvent y accéder en la déclarant eux-mêmes. En tant que matière de style, que ce soit (a) déclarent que statique, ou (b) déclarer cela non statique et i> incluent sa déclaration dans le fichier correspondant. (Si C avait un système de module à part entière, des directives comme celle-ci ne seraient pas nécessaires.)
Marquage d'une fonction ou d'une variable globale en tant que En d'autres termes, il ne dispose que d'une liaison interne dans l'unité de traduction actuelle. Lorsqu'il n'utilise pas statique code> le rend invisible à la liaison une fois que l'unité de traduction actuelle est compilée dans un fichier d'objet. P>
statique code> ou explicitement à l'aide du spécificateur de classe de stockage code> extern code>, le symbole a une liaison externe. P>
de la norme C99: p>
6.2.2 Liens des identifiants forts> p>
Si la déclaration d'une scorie d'une lunette d'application pour un objet ou une fonction contient la classe de stockage Spéci fi er statique, l'identifiant a une liaison interne. P> blockQuote>
et p>
Dans l'ensemble des unités de traduction et des bibliothèques qui constitue un programme complet, chacun Déclaration d'une identification particulière avec un lien externe indique le même objet ou fonction. Dans une unité de traduction, chaque déclaration d'une identi fi er avec interne Linkage indique le même objet ou la même fonction. Chaque déclaration d'une identi fi er sans Linkage indique une entité unique. P> blockQuote>