Domanda

In C:Perché solo le funzioni inline con collegamento interno (ovvero dichiarate con statico) possono fare riferimento (ovvero copiare indirizzo, leggere, scrivere o chiamare) una variabile o funzione nell'ambito del file con durata di archiviazione statica mentre altre funzioni inline potrebbero non farlo?

È stato utile?

Soluzione

Questo è come le cose sono definiti.

La funzione inline verrebbe inserito nel modulo dove è chiamato. Quindi, non si può accedere alla roba privata nel suo modulo in cui è definito.

Se la funzione inline è solo usato in quel modulo (collegamento interno). Poi è sicuro dotarla di un accesso alla roba "privata" di quel modulo.

Altri suggerimenti

Un oggetto o una funzione con ambito file, dichiarato con lo specificatore di archiviazione "statico" ha un collegamento interno.Sebbene la sua durata corrisponda all'intera esecuzione del programma, un oggetto con collegamento interno non è dichiarato per (cioè visibile da) altre unità di traduzione.

Per una funzione inline con collegamento esterno, il compilatore può:

  • chiama il esempio all'interno dell'unità di traduzione in cui è dichiarata la funzione
  • eseguire una sostituzione in linea al momento della chiamata
  • crearne uno identico ma separato esempio della funzione all'interno dell'unità di traduzione chiamante

Negli ultimi due casi gli oggetti con collegamento interno non sarebbero visibili.Pertanto una funzione inline con collegamento esterno non può fare riferimento a un identificatore con collegamento interno.

Inoltre, "non deve contenere una definizione di oggetto modificabile con durata di archiviazione statica" poiché ciò potrebbe comportare più istanze di quell'oggetto che probabilmente non è il comportamento previsto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top