Ich arbeite in der C-Sprache und modifiziere Code zuvor von jemand anderem geschrieben. Ich kämpfe mit ein paar Dingen und versuche so viel wie möglich über das, was vor sich geht, zu verstehen. Also, wie meine Frage sagte, was ist der Unterschied zwischen und void
beim Erstellen einer Funktion? Ich entschuldige mich im Voraus für den langen Post, aber ich wollte, dass Sie wissen, dass ich etwas recherchiert habe, aber nicht verstehe, was ich gefunden habe.Was ist der Unterschied zwischen statischem inline void und void?
Ich fand an explanation of static
das verwirrt mich:
Der statische Bezeichner bedeutet, dass die Funktion nicht aus anderen Dateien referenziert werden; Das heißt, der Name wird nicht vom Linker exportiert.
Wenn ich das lese, nehme ich an, dass die Referenzierung einer Funktion anders ist als das Aufrufen einer Funktion? Ich gehe davon aus, dass diese Funktion aus einer anderen .c-Datei aufgerufen wird. Wenn dies der Fall ist, was bezieht sich auf eine Funktion?
Durch die gleiche Website erklären sie inline functions und ich verstehe nicht, was es bedeutet.
Das __inline Schlüsselwort teilt dem Compiler den Code innerhalb die Funktionsdefinition für jede Instanz eines Funktionsaufrufs zu ersetzen. Die Ersetzung erfolgt jedoch nur im Ermessen des Compilers. Für Beispiel führt der Compiler eine Funktion nicht inline ein, wenn seine Adresse ist, oder wenn es für Inline zu groß ist.
Huh ???
Jede Hilfe wird sehr geschätzt, und ich entschuldige mich noch einmal für die schrecklich lange Post.
Das Folgende ist in file1.c befindet (generische Namen verwenden, wie ich glaube nicht, dass es darauf ankommt)
COMPLEX cNoiseSample;
CGauss(&cNoiseSample, loopbackRadio->pState);
Die folgende
in file2.c befindetstatic inline void CGauss(COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)
{
//code
}
auch, 'inline' ist notwendig, um die Ein-Definition-Regel zu erzwingen, wenn eine Funktion in einem Header in verschiedenen Kompilierungseinheiten definiert ist (oder zumindest das ist der Fall für C++, kenne dieses Detail nicht genau in C, I stell dir vor, es wird gleich sein) – rubenvb
Nun ich denke, ich bin ein wenig verwirrt als @ Graham-Borland. Lassen Sie mich Ihnen zeigen warum: COMPLEX cNoiseSample; CGauss (& cNoiseSample, loopbackRadio-> pState);/* Dieser Code wird an einer Stelle in einer .c-Quelldatei aufgerufen, und in einer anderen .c-Quelldatei habe ich folgendes: */static inline void CGauss (KOMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState)/* Ich entschuldige mich für die schlechte Formatierung Im Kommentarfeld war ich nicht sicher, wie ich das sonst tun sollte. */ – TZPike05
Bearbeiten Sie Ihre Frage, fügen Sie das Code-Snippet dort ein. –