Inline podem corpos de funções em entidades de referência C declarou mais tarde

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

  •  10-07-2019
  •  | 
  •  

Pergunta

Vamos dizer que eu tenho duas funções embutidas no meu arquivo de cabeçalho:

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

Posso supor que um compilador C99 vai inline "foo", mesmo que 'bar' é declarado mais tarde? Supondo que nenhuma outra regra interna como o corpo de função para grande é acionado.

são implementações de compiladores c fazer isso (os populares dizem Intel-C / Sun Studio / MSVC e GCC), mesmo se C99 deixar isso como uma opção?

Foi útil?

Solução

Enquanto as funções estão devidamente protótipo, não é vai importa que ordem você declarar-los.

Outras dicas

inline é apenas uma sugestão para o compilador, e mais frequentemente do que não é ignorado em compiladores de otimização modernos. Você não pode presumir nada sobre se algo é inlined ou não. Alguns compiladores fornecer pragmas que forçam uma função especial para ser embutido, se for de todo possível (por exemplo MSVC __forceinline). Se você absolutamente precisa saber, você tem que olhar para a desmontagem da saída.

Dito isso, para um determinado trecho, qualquer compilador otimizado decente seria embutido que, com inline ou sem, por isso, desde que seja um único cabeçalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top