4
#define INIT_MACRO create(); some(); enviroment();
...
void function(){
  INIT_MACRO
    extra_indented();
  normal_indented();
}

自動的にインデントするように要求されたときに、emacs で上記の状況を正しく処理するにはどうすればよいですか?

EDIT私が見る唯一の解決策は、emacsに、大文字、アンダースコア、およびスペースのみを含む行を、最後にセミコロンがあるかのように扱うように指示することです...しかし、どうすればそれを行うことができますか?

4

4 に答える 4

10

これは機能します:

#define INIT_MACRO do { create(); some(); enviroment(); } while (0)
...
void function(){
  INIT_MACRO;
  extra_indented();
  normal_indented();
}

以下を使用する場合の問題を回避するために、通常はこのトリックを使用することをお勧めします。

if (...)
  MACRO();
else
  ...

私の意見では、各行のセミコロンは読みやすいです。

于 2011-07-12T15:40:04.100 に答える
1

INIT_MACRO 行を ; で終わらせませんか?

于 2011-07-12T16:50:24.997 に答える
0

マクロを関数ラッパーとして使用すると、マクロ();を呼び出すときに最後になく、define をdo {and} while(0)で囲まずにとにかく実行されません..コードが醜くなり、保守が難しくなり、1 つの C コーディング標準ではサポートされません... 他の言葉でそれはブリーディングアイコードと呼ばれます。したがって、デフォルト設定では不可能です。

独自のメジャー/マイナー モードを作成する必要があります。この新しいタイプの構文をサポートするには... または、現在の cc-mode.el を確認することもできます。

于 2011-07-12T17:22:15.790 に答える