Può incorporare corpi funzione in entità di riferimento C dichiarate successivamente

StackOverflow https://stackoverflow.com/questions/1817950

  •  10-07-2019
  •  | 
  •  

Domanda

Diciamo che ho due funzioni incorporate nel mio file di intestazione:

inline int foo() { return bar()+2; }
inline int bar() { return 3; }

posso supporre che un compilatore C99 includerà "pippo" anche se "bar" viene dichiarato in seguito? Supponendo che nessun'altra regola interna come il corpo della funzione di grandi dimensioni sia attivata.

Lo stanno facendo le implementazioni dei compilatori c (quelli più famosi dicono Intel-C / Sun Studio / MSVC e gcc) anche se C99 lo lascia come opzione?

È stato utile?

Soluzione

Finché le funzioni sono correttamente prototipate, non importa quale ordine le dichiari.

Altri suggerimenti

inline è solo un suggerimento per il compilatore e il più delle volte viene ignorato nei moderni compilatori di ottimizzazione. Non puoi supporre nulla riguardo al fatto che qualcosa venga allineato o meno. Alcuni compilatori forniscono pragmi che impongono di incorporare una particolare funzione, se possibile (ad es. MSVC __forceinline ). Se hai assolutamente bisogno di sapere, devi guardare allo smontaggio dell'output.

Detto questo, per un determinato frammento, qualsiasi compilatore di ottimizzazione decente lo avrebbe integrato, con inline o senza, purché si tratti di una singola intestazione.

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