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?

Était-ce utile?

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:

  1. La statique de la fonction inline f est définie dans le fichier a.h
  2. a.h est inclus par C fichiers x.c et y.c
  3. x.c prend l'adresse de f et les stocke dans une variable globale f_addr
  4. y.c prend l'adresse de f et la compare à celle de l'identité à la valeur stockée dans f_addr
  5. 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 fonction f

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top