Haciendo cc -std=c99 example.c
en el siguiente simplificada example.c
archivo:¿Cómo alinear y usar correctamente una función en línea en C99? (Generación falla)
inline void a()
{
}
int main()
{
a();
return 0;
}
me obtiene:
En función `principal:
example.c :(texto + 0x7).: referencia indefinida a 'a'
collect2: ld devolvió el código de salida 1
Según entiendo este tiene que ver con el requisito de la norma C99 para exigir exactamente una definición más para cada función en línea no estática que se utiliza en los casos en que el cuerpo no se puede alinear? Si eso es así, supongo que podría hacerlo con static inline
en su lugar, pero no quiero que me muerda más tarde, entonces, ¿cuál sería el mejor curso de acción aquí? Obviamente, me quiero quedar con C99 y quiero alinear algunas funciones. (Sí, soy consciente de que el compilador normalmente sabe qué alinear sin que se lo diga, pero tengo mis razones)
La palabra clave 'inline' no es lo que crees que es. En el mejor de los casos, es una pista para el compilador de que este código puede ser un candidato para estar en línea. En el peor de los casos, es ignorado. – jer
¿Puede compilar otros archivos a través de su cc? Tal vez problema en el compilador. –
En realidad estoy usando '-Winline', así que en mi caso no será ignorado. Perdóneme por no haber especificado esto, pero no creo que alguien esté comentando lo que significa "en línea" en C o que reacciona a ese lado de los asuntos. En la mayoría de las otras variaciones de lo anterior, por supuesto tiene toda la razón. @Mihran no, no hay problema con el compilador. Después de verificar más de cerca con las especificaciones C99, he especificado las funciones en línea en cuestión como 'static inline' y todo funciona. Sí quiero saber si estoy dando los pasos correctos aquí ... – amn