astyle プログラムが C ソース ファイルをフォーマットしないのはなぜですか?
背景: gitlab から ac ソース ファイルをコピーして貼り付けたのですが、何らかの理由で、結果のファイルがごちゃごちゃになってしまいました。ファイルを 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 プリプロセッサ ステートメントは 1 行に単独で記述する必要があることです。同じ行に 2 つの #include を記述することはできず、#include の後にメイン定義を記述することもできません。
あなたが貼り付けた方法で試してみたところ、あなたと同じエラー メッセージが表示されました (コンパイラが異常終了することはわかっていましたが)。各 #include の後に改行を追加すると、フォーマットされました。したがって、貼り付けるために単純化しただけなのでない限り、おそらくそれが原因です。確かに、その変更を加えるまでは機能しませんでした。
編集:
GNU indent でも試してみました。それでも失敗します。答えは、ファイルの最初の部分を修正することのようです。なぜそれを検出して自動的に実行しないのでしょうか? いい質問ですね。最初にファイル自体を少しフォーマットする以外に、これを機能させる方法はありますか? わかりませんが、ないようです。