Puede incorporar cuerpos de funciones en entidades de referencia C declaradas más tarde
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?
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.