Puede incorporar cuerpos de funciones en entidades de referencia C declaradas más tarde

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

  •  10-07-2019
  •  | 
  •  

Pregunta

Digamos que tengo dos funciones en línea en mi archivo de encabezado:

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

¿puedo suponer que un compilador C99 incluirá "foo" en línea? incluso si 'bar' se declara más tarde? Suponiendo que no se active ninguna otra regla interna como cuerpo de función demasiado grande.

¿Las implementaciones de los compiladores de c están haciendo esto (los populares dicen Intel-C / Sun Studio / MSVC y gcc) incluso si C99 deja esto como una opción?

¿Fue útil?

Solución

Mientras las funciones estén correctamente prototipadas, no importará en qué orden las declare.

Otros consejos

inline es solo una pista para el compilador, y la mayoría de las veces se ignora en los compiladores de optimización modernos. No puede asumir nada sobre si algo se alinea o no. Algunos compiladores proporcionan pragmas que obligan a una función particular a estar en línea si es posible (por ejemplo, MSVC __forceinline ). Si realmente necesita saber, debe ver el desmontaje de la salida.

Dicho esto, para un fragmento dado, cualquier compilador de optimización decente alinearía eso, con inline o sin él, siempre que sea un solo encabezado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top