L'identité de la statique de la fonction en ligne?
-
14-11-2019 - |
Question
Est-ce que C statique de la fonction inline d'identité au moment de l'exécution?
Devrais-je me soucier de conflit de noms de constructions?
Si la fonction est définie dans .c
fichier?Est-il même?
La solution
Est-ce que C statique de la fonction inline d'identité au moment de l'exécution?
Statique de la fonction en ligne a identité au sein d'une unité de compilation si le compilateur au moins une fois choisit de ne pas l'inclure, ou si vous prenez l'adresse de la fonction.
Les prises adresse est valide seulement lors de l'actuelle unité de compilation (.c
fichier).Dans une autre unité de compilation (un autre .c
fichier), le compilateur va vous donner une autre adresse.
Comme avec toute autre fonction du corps visible pour le compilateur, le code de la fonction peut être entièrement ou partiellement reproduit dans divers endroits dans le code assembleur généré par le compilateur.
Statique de la fonction inline (comme n'importe quelle fonction statique) n'est pas visible à partir de tout autre .c
dossier de l'été compilés .c
fichier.
Devrais-je me soucier de conflit de noms de constructions?
Seulement si vous prenez l'adresse d'un static inline fonction définie dans un fichier d'en-tête et de faire ce qui suit:
- La statique de la fonction inline
f
est définie dans le fichiera.h
a.h
est inclus par C fichiersx.c
ety.c
x.c
prend l'adresse def
et les stocke dans une variable globalef_addr
y.c
prend l'adresse def
et la compare à celle de l'identité à la valeur stockée dansf_addr
- Le résultat de la comparaison sera la
false
, malgré le fait que sur un différents niveaux d'abstraction c'est la même fonctionf
Si la fonction est définie .c fichier?Est-il même?
De compilateur C, point de vue, c'est exactement la même que la définition de la fonction dans un fichier d'en-tête et y compris le fichier d'en-tête dans le .c fichier.Le compilateur n'a aucune idée sur les fichiers d'en-tête, il ne voit qu'une seule unité de compilation.Un fichier d'en-tête est un concept qui existe dans l'esprit des programmeurs en utilisant le langage C, cette notion n'existe pas du point de vue du compilateur C.
Autres conseils
La désignation d'une fonction en ligne est tout aussi important que la nomination d'un non-fonction inline.Le nom est utilisé par les compilateur pour identifier la fonction à appeler.Il est également utilisé par les programmeurs de la lecture du code à comprendre ce que la fonction n'.
Au moment de l'exécution le nom de la fonction n'est pas pertinent.
Notez également que l' inline
mot-clé est seulement un astuce pour le compilateur.Cette fonction peut ne pas être incorporé en dépit de la inline
mot-clé.De même, une fonction qui n'est pas marqué inline
peut-être encore inline par le compilateur.
Vous ne pourriez pas de soins sur les conflits de noms de fonctions inline, mais je peux vous garantir que le compilateur!
Inline est une des dernières étapes de l'opération lors de la compilation, le compilateur devra d'abord déterminer l'appel de la structure de votre programme qui nécessite le compilateur correctement résoudre tous les nommés des appels.
Au moment de l'exécution, vous ne pouvez pas savoir le nom d'une fonction en cours d'exécution, sans explicitement le codage de la magie pour le déterminer - c
n'est pas réfléchissant.
Marquer des points, le mot-clé inline n'est qu'une indication - le compilateur est libre de l'ignorer si elle décide de meilleures performances est obtenu à partir d'un appel explicite.