Inline podem corpos de funções em entidades de referência C declarou mais tarde
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?
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.