Warum formatiert das Astyle-Programm meine C-Quelldatei nicht?
Hintergrund: Ich habe die ac-Quelldatei aus Gitlab kopiert und eingefügt und aus irgendeinem Grund war die resultierende Datei durcheinander. Ich hatte gehofft, die Datei durch astyle ausführen zu können und eine schön formatierte Datei zu erhalten, aber meine verschiedenen Versuche hatten keinen Erfolg. Jeder Versuch führte zu einer Meldung mit dem Inhalt „Unverändertes ecl-hello-world.c“.
Hier ist die fehlerhafte Quelldatei:
#include <stdio.h> #include <ecl/ecl.h> int main (int argc, char **argv) { /* Initialize ECL */ cl_boot(argc, argv); /* Initialize the library we linked in. Each library * has to be initialized. It is best if all libraries * are joined using ASDF:MAKE-BUILD. */ extern void init_lib_HELLO_LISP(cl_object); ecl_init_module(NULL, init_lib_HELLO_LISP); cl_object result= cl_eval(c_string_to_object("(hello-lisp)")); ecl_print(result, ECL_T); cl_object my_fun = cl_eval(c_string_to_object("(lambda (x) (1+ x))")); ecl_print(my_fun, ECL_T); result=cl_funcall(2, my_fun, ecl_make_fixnum(8)); ecl_print(result, ECL_T); ecl_terpri(ECL_T); cl_shutdown(); return 0; }
Hier sind die Aufrufe eines Stils, die ich ausprobiert habe:
astyle ecl-hello-world.c
astyle --style=allman --indent=spaces=4 ecl-hello-world.c
astyle --style=linux ecl-hello-world.c
Antwort1
Das Problem besteht darin, dass eine C-Präprozessoranweisung in einer eigenen Zeile stehen muss; Sie können nicht zwei #includes in der gleichen Zeile haben und die Hauptdefinition kann nicht nach dem #include stehen.
Als ich es so probierte, wie Sie es eingefügt hatten, bekam ich dieselbe Fehlermeldung wie Sie (obwohl ich wusste, dass ein Compiler einen Anfall bekommen würde). Nachdem ich nach jedem #include einen Zeilenumbruch hinzugefügt hatte, wurde es formatiert. Wenn Sie das also nicht nur zum Einfügen vereinfacht haben, ist das wahrscheinlich der Grund; jedenfalls hat es erst funktioniert, nachdem ich diese Änderung vorgenommen hatte.
Bearbeiten:
Ich habe es gerade auch mit GNU Indent versucht. Auch das schlägt fehl. Die Antwort scheint wirklich zu sein, den ersten Teil der Datei zu reparieren. Warum erkennt und macht es das nicht selbst? Gute Frage. Gibt es eine Möglichkeit, es zum Laufen zu bringen, außer die Datei selbst zuerst ein wenig zu formatieren? Ich weiß es nicht, aber es scheint nein zu geben.