Sto lavorando nel linguaggio C e modificando il codice precedentemente scritto da qualcun altro. Sto lottando con alcune cose e sto cercando di capire il più possibile su quello che sta succedendo. Quindi, come la mia domanda ha affermato, qual è la differenza tra static inline void
e void
quando si crea una funzione? Mi scuso in anticipo per il post lungo, ma volevo che tu sapessi che ho fatto qualche ricerca, ma non capisco cosa ho trovato.Qual è la differenza tra vuoto statico e vuoto in linea?
ho trovato an explanation of static
che mi confonde:
L'identificatore statica significa che la funzione non è possibile fare riferimento da altri file; ovvero, il nome non viene esportato dal linker.
Leggendo questo, presumo che il riferimento a una funzione sia diverso dal chiamare una funzione? Presumo che questa funzione sia chiamata da un altro file .c. In tal caso, che cosa fa riferimento a una funzione?
Attraverso lo stesso sito web, spiegano inline functions e non capisco cosa significhi.
La parola chiave __inline dice al compilatore di sostituire il codice all'interno la definizione di funzione per ogni istanza di una chiamata di funzione. Tuttavia, la sostituzione avviene solo a discrezione del compilatore. Per esempio , il compilatore non esegue la funzione inline se il suo indirizzo è preso o se è troppo grande per inline.
Huh ???
Qualsiasi aiuto è molto apprezzato e mi scuso ancora una volta per il post terribilmente lungo.
Di seguito è situato in file1.c (Usando nomi generici come io non credo che importa)
COMPLEX cNoiseSample;
CGauss(&cNoiseSample, loopbackRadio->pState);
Di seguito è situato in file2.c
static inline void CGauss(COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)
{
//code
}
anche 'inline' è necessario per applicare la regola a una definizione quando una funzione è definita in un'intestazione inclusa in diverse unità di compilazione (o almeno questo è il caso per C++, non conosco questo dettaglio esattamente in C, I immagino che sarà lo stesso) – rubenvb
Beh, immagino di essere un po 'confuso di @ Graham-Borland. Lascia che ti mostri perché: COMPLEX cNoiseSample; CGauss (& cNoiseSample, loopbackRadio-> pState);/* Questo codice è chiamato in un punto in un file sorgente .c, e in un diverso file sorgente .c ho questo: */statico inline void CGauss (COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)/* Mi scuso per la cattiva formattazione nella casella dei commenti, non sapevo come fare altrimenti. */ – TZPike05
Modifica la domanda, incolla lo snippet di codice qui. –