Syntaxfehler den ich nicht erkenne
-
Hey ich denke das Problem is relativ einfach trotzdem stehe ich gerade ein Wenig auf dem Schlauch.
Ich bin gerade dabei ein Programm, an dem ich leichte Änderungen vorgenommen habe zu Compilen jetzt kommt allerdings immer folgender Fehler:
error: expected ‘;’ before ‘typedef’
mir ist klar was das bedeutet, davor fehlt irgendwo wohl ein ;
allerdings finde ich diesen nicht:
static int do_syslog = 1; /* Should we syslog? controled by syslog_facility = "none" */ #ifdef LIBWRAP #include <tcpd.h> int allow_severity =0, deny_severity = 0; #endif typedef enum { CR_DIE, CR_WARN } CR_ACTION;
Falls Ihr den completten code sehen wollt:
https://github.com/yrutschle/sslh/blob/master/common.c
Und dann ist das in der Zeile 52. Ich habe auch schon nach dem ausdruck in der Datei gesucht und nur diesen gefunden daher denke ich, das es dort sein muss.
Über Hilfe würde ich mich freuen.
-
@MrLuegner
Ist zwar nicht der Fehler, da es übersetzt wird, aber warum nutzt Du ein Typedef für eine enum (ist das C)?
Geht ja auch so:enum CR_ACTION { CR_DIE, CR_WARN };
-
@MrLuegner:
Dein Fehler ist vermutlich in irgendeinem der#include
s.@Helmut-Jakoby: das ist nicht dasselbe.
Geht:
typedef enum { CR_DIE, CR_WARN } CR_ACTION; CR_ACTION foo() { return CR_DIE; }
In deiner Variante müsstest du schreiben:
enum CR_ACTION foo() { return CR_DIE; }
Oben wird also dem kompletten
enum {...}
(inklusiveenum
) ein Name gegeben, deine Variante benötigt dagegen immer noch dasenum
dazu bei Verwendung. C != C++.
-
@wob sagte in Syntaxfehler den ich nicht erkenne:
deine Variante benötigt dagegen immer noch das enum dazu bei Verwendung
Oh, das ist bei mir (C++ Visual Studio und MinGw) nicht so .
Trotzdem danke, ich werde mich mal ein bisschen mehr damit beschäftigen.
-
@Helmut-Jakoby sagte in Syntaxfehler den ich nicht erkenne:
Oh, das ist bei mir (C++ Visual Studio und MinGw) nicht so
Kompilierst du denn als C? Oder als C++?
-
@wob Beide Versionen kompilieren ohne den Zusatz 'enum' bei der Rückgabe. Getestet mit Visual Studio 2019 Vers.b16.10.0.. Eigenschaften/Allgemein/C++-Sprachstandard 'ISO C++17-Standard(/std:c++17)'
Edit1: Ich hab das noch gefunden: https://stackoverflow.com/questions/385023/why-do-you-use-typedef-when-declaring-an-enum-in-c
-
@Helmut-Jakoby sagte in Syntaxfehler den ich nicht erkenne:
Beide Versionen kompilieren ohne den Zusatz 'enum' bei der Rückgabe.
enum { CR_DIE, CR_WARN } CR_ACTION; CR_ACTION foo() { return CR_DIE; } int main() {}
1>------ Build started: Project: Project1, Configuration: Debug Win32 ------ 1>Source.c 1>C:\Users\Swordfish\source\repos\Project1\Source.c(6,11): error C2061: syntax error: identifier 'foo' 1>C:\Users\Swordfish\source\repos\Project1\Source.c(6,11): error C2059: syntax error: ';' 1>C:\Users\Swordfish\source\repos\Project1\Source.c(6,15): error C2059: syntax error: '<parameter-list>' 1>Done building project "Project1.vcxproj" -- FAILED.
Danke, 6, setzten.
-
Also meinst du das ich einen generellen Fehler in #include <tcpd.h> habe oder das da nur ein ; fehlt das habe ich jetzt auch schon mal probiert und es ist keine Veränderung im Fehler.
-
@Helmut-Jakoby sagte in Syntaxfehler den ich nicht erkenne:
'ISO C++17-Standard(/std:c++17)'
Wie ich oben schrieb: C != C++. Dies ist das C-Forum.
-
@MrLuegner sagte in Syntaxfehler den ich nicht erkenne:
Also meinst du das ich einen generellen Fehler in #include <tcpd.h> habe oder das da nur ein ; fehlt das habe ich jetzt auch schon mal probiert und es ist keine Veränderung im Fehler.
Da ich da keinen Fehler gesehen habe, bin ich von einem Fehler in einer deiner .h-Dateien ausgegangen. Andererseits habe ich das repo mal eben schnell ausgecheckt und was soll ich sagen, "make" läuft ohne Fehler durch (und kompiliert dabei auch das common.c erfolgreich), es gibt nur eine Warnung anderswo (in echosrv.c) wegen einer unbenutzen Variable.
Daher: es geht bei mir, kann dir also nicht helfen.
-
@wob Oh shit, hab ich nicht bemerkt. Danke.
-
@Swordfish Bitte, 1, aufstehen!
-
Okay danke für deine Hilfe dann schau ich mal weiter.