astyleはソースファイルのフォーマットを変更しません

astyleはソースファイルのフォーマットを変更しません

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 でも試してみました。それでも失敗します。答えは、ファイルの最初の部分を修正することのようです。なぜそれを検出して自動的に実行しないのでしょうか? いい質問ですね。最初にファイル自体を少しフォーマットする以外に、これを機能させる方法はありますか? わかりませんが、ないようです。

関連情報