Arbeiten zur Berechnung des geometrischen Mittelwerts von Werten in einem Array
Die Funktion sollte die Geo-Mittel richtig berechnen, aber ich bekomme eine seltsame Fehlermeldung
%Vor% extern "C"
ist nicht gültig C (es ist nur in C ++ gültig). Entfernen Sie es einfach, wenn Sie in reinem C arbeiten.
Ich beantworte diese Frage in einem Versuch zu decken, der in einer ausführlicheren Antwort enthalten sein könnte, um dem Fragesteller oder anderen Personen, die diese Seite besuchen, zu helfen.
Fehler: "erwartet" ('vor String-Konstante "
Wie in einer anderen Antwort auf Ihre Frage erwähnt, ist extern "C"
nicht gültig C (es ist nur in C ++ gültig). Sie können es entfernen, wenn Sie nur reines C verwenden.
Wenn Sie (oder eine andere Person) jedoch eine Mischung aus C- und C ++ - Quelldateien haben, können Sie das Makro __cplusplus
verwenden. __cplusplus
-Makro wird für jede Kompilierungseinheit definiert, die über den C ++ - Compiler ausgeführt wird. Im Allgemeinen bedeutet dies, CPP-Dateien und alle Dateien, die von dieser CPP-Datei enthalten sind.
Somit kann das gleiche .h (oder .hh oder .hpp oder what-have-you) zu verschiedenen Zeiten als C oder C ++ interpretiert werden, wenn verschiedene Kompilierungseinheiten sie enthalten. Wenn die Prototypen in der .h-Datei auf C-Symbolnamen verweisen sollen, müssen sie extern "C" haben, wenn sie als C ++ interpretiert werden, und sie sollten kein externes "C" haben, wenn sie als C interpretiert werden (wie in Ihrem Fall) Sie haben einen Fehler bekommen!).
%Vor%Hinweis: Alle
extern "C"
bewirkt die Verknüpfung. C ++ - Funktionen haben, wenn sie kompiliert werden, ihre Namen gemangelt. Dies macht Überladung möglich. Der Funktionsname wird basierend auf den Typen und der Anzahl der Parameter geändert, sodass zwei Funktionen mit demselben Namen unterschiedliche Symbolnamen haben.Wenn Sie eine Kopfzeile für Code mit C-Verknüpfung einfügen (z. B. Code, der von einem C-Compiler kompiliert wurde), müssen Sie
extern "C"
die Kopfzeile verwenden. Auf diese Weise können Sie eine Verknüpfung mit der Bibliothek herstellen. (Otherwise, your linker would be looking for functions with names like _Z1hic when you were looking for void h(int, char)
).
Die erste Zeile sollte sein: extern C;
Die andere Option wäre c
außerhalb der Hauptfunktion zu deklarieren ohne das extern
Schlüsselwort ...
Tags und Links c