Estoy trabajando en el lenguaje C y modificando el código previamente escrito por otra persona. Estoy luchando con algunas cosas y trato de entender todo lo que pueda sobre lo que está sucediendo como puedo. Entonces, como decía mi pregunta, ¿cuál es la diferencia entre static inline void
y void
al crear una función? Me disculpo de antemano por la publicación larga, pero quería que supieras que investigué un poco, pero no entiendo lo que he encontrado.¿Cuál es la diferencia entre el vacío estático en línea y el vacío?
He encontrado an explanation of static
que me confunde:
El especificador estática significa que la función no se puede hacer referencia de otros archivos; es decir, el nombre no es exportado por el vinculador.
Al leer esto, supongo que hacer referencia a una función es diferente a llamar a una función? Supongo que porque esta función se llama desde otro archivo .c. Si ese es el caso, ¿qué hace referencia a una función?
A través del mismo sitio web, explican inline functions y no entiendo lo que significa.
La palabra clave __inline le dice al compilador para sustituir el código dentro de la definición de la función de cada caso de una llamada de función. Sin embargo, la sustitución solo ocurre a discreción del compilador. Para el ejemplo , el compilador no alinea una función si su dirección es tomada o si es demasiado grande para alinearse.
Huh ???
Cualquier ayuda es muy apreciada, y una vez más me disculpo por la publicación terriblemente larga.
La siguiente se encuentra en Archivo1.c (El uso de nombres genéricos, ya que no creo que importe)
COMPLEX cNoiseSample;
CGauss(&cNoiseSample, loopbackRadio->pState);
La siguiente se encuentra en Archivo2.c
static inline void CGauss(COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)
{
//code
}
también, 'inline' es necesario para hacer cumplir la regla de una definición cuando una función se define en un encabezado incluido en diferentes unidades de compilación (o al menos este es el caso de C++, no se conoce exactamente este detalle en C, I imagina que será lo mismo) – rubenvb
Bueno, supongo que estoy un poco confundido que @ Graham-Borland. Déjame mostrarte por qué: COMPLEX cNoiseSample; CGauss (& cNoiseSample, loopbackRadio-> pState);/* Este código se llama en un punto en un archivo fuente .c, y en un archivo fuente .c diferente, tengo esto: */static inline void CGauss (COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)/* Me disculpo por el pobre formato en el cuadro de comentarios, no estaba seguro de qué otra manera hacer esto. */ – TZPike05
Edite su pregunta, pegue ese fragmento de código allí. –