Question

En C: Pourquoi uniquement les fonctionnalités en ligne avec liaison interne (ie déclarée avec statique) peut faire référence (c.-à copier l'adresse, lire, écrire ou appel) une variable ou une fonction à la portée du fichier avec la durée de stockage statique alors que d'autres en ligne fonctions ne peuvent pas?

Était-ce utile?

La solution

Voici comment les choses sont définies.

La fonction inline serait insérée dans le module dans lequel il est appelé. Donc, il ne peut pas accéder à la substance privée dans son module où il est défini.

Si la fonction inline est uniquement utilisée dans ce module (liaison interne). Ensuite, il est sûr de lui accorder un accès à la substance « privée » de ce module.

Autres conseils

Un objet ou une fonction de la portée du fichier, déclarées avec le spécificateur de stockage « statique » a une liaison interne. Bien que sa durée de vie est toute l'exécution du programme, un objet avec lien interne ne sont pas déclarés (i.e. visible) d'autres unités de traduction.

Pour une fonction en ligne avec lien externe, le compilateur peut:

  • appeler le par exemple dans l'unité de traduction dans lequel la fonction est déclarée
  • effectuer une substitution en ligne au point de l'appel
  • créer une identique mais séparée par exemple de la fonction au sein de l'unité de traduction d'appel

Dans les deux derniers cas, les objets avec une liaison interne ne seraient pas visibles. Par conséquent, une fonction en ligne avec une liaison externe ne peut faire référence à un identificateur de liaison interne.

En outre, il « ne doit pas contenir une définition d'un objet modifiable avec la durée de stockage statique » car cela pourrait entraîner plusieurs instances de cet objet qui est probablement pas le comportement prévu.

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