Почему программа astyle не форматирует мой исходный файл на языке C?
Предыстория: Я скопировал и вставил исходный файл ac из gitlab, и по какой-то причине полученный файл оказался перемешанным. Я надеялся, что смогу прогнать файл через astyle и получить хорошо отформатированный файл, но мои многочисленные попытки не дали никакого эффекта. Каждая попытка приводила к сообщению "Unchanged ecl-hello-world.c"
Вот искаженный исходный файл:
#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; }
Вот примеры использования astyle, которые я пробовал:
astyle ecl-hello-world.c
astyle --style=allman --indent=spaces=4 ecl-hello-world.c
astyle --style=linux ecl-hello-world.c
решение1
Проблема в том, что оператор препроцессора C должен располагаться на отдельной строке; нельзя размещать два #include на одной строке, и нельзя размещать основное определение после #include.
Когда я попробовал вставить его так, как вы его вставили, я получил то же самое сообщение об ошибке, что и вы (хотя я знал, что компилятор устроит истерику). После добавления переноса строки после каждого #include он его отформатировал. Так что, если только вы не упростили его только для вставки, то, вероятно, поэтому; определенно он не работал, пока я не внес это изменение.
Редактировать:
Я только что попробовал с GNU indent. Тоже не получается. Кажется, ответ действительно в том, чтобы исправить первую часть файла. Почему он не обнаруживает и не делает этого сам? Хороший вопрос. Есть ли способ заставить его работать, кроме как сначала немного отформатировать сам файл? Я не знаю, но, кажется, нет.