2011-01-12 25 views
4

デフォルトでは、Emacsはプリプロセッサコードをインデントしません。私はそれが現在では時代遅れの歴史的なルーツを持っていることを知っています。emacsのCコードとしてプリプロセッサディレクティブをインデントする

しかし、多くの#ifdefがインデントされていないコードを読み込むのは難しいです。代わりに私が今何を得るの

void myfunc() { 
    int foo; 

    #ifdef BAR 
    printf(foo); 
    #endif 

    return foo; 
} 

だから私はemacsの自動インデントが私にそのような何か与えたいと思い、あなたがハッカーをemacsのその問題の

void myfunc() { 
    int foo; 

#ifdef BAR 
    printf(foo); 
#endif 

    return foo; 
} 

どれリードを:) ?

+3

でなければなりません

はブロックスコープが重大なミスである持っています。これはあなた自身でこれを発見するために数十キロ離れています。 –

+0

+1〜@ハンス。第2の形式は実際にははるかに明確なIMOです。ファイルの内容を実際に変更しているので、ファイルの「スコープ」レベルでインデントする方が賢明です(インデントがまったくない)。私は、プリプロセッサディレクティブに関してスコープについて話すことがどれほど有効であるのかよくわかりません。 – JeremyP

+1

プリプロセッサのコードがどのようにインデントされているか気にするならば、あなたはそれが**あまりにも**あることを意味します。 '#ifdef'は実際のソースファイルには絶対含まれません。これはGNUの 'screen'のような読めないレガシーコードの悩みです。システムごとの調整の代わりに、どこかでヘッダファイル内の壊れたシステムを修復するための条件を始めて隠すための移植可能なコードを書いてください。オプションの機能の場合は、同様の操作を行い、その機能が無効になっている場合は、その機能のマクロ/関数呼び出しを '0'または'(void)0'に展開します。 –

答えて

12

プリプロセッサー行にオフセットを追加するようにEmacsに伝えることができます。

  • Ccと共同(制御-C制御-O)を押しプリプロセッサライン
  • にカーソル(point)を入れ
  • ミニバッファは、Syntactic symbol to change:
  • タイプcpp-macroを言うべきですプレスを入力
  • 新しいオフセット(数値 - 通常0)を入力してください

各プリプロセッサ行のTABは、正しくインデントする必要があります。 (またはM-xindent-region ...)。

変更を永久に設定するには、たとえば、.emacsファイルに必要な行を追加します。
以前に入力したコマンドを簡単にコピーするには、c-x ESC ESCを入力し、矢印キーを使用して(c-set-offset ...) Elispコマンドを見つけます。そのプリプロセッサマクロをふり

(c-set-offset (quote cpp-macro) 0 nil) 
+2

実際、それは方法ですが、私が望む振る舞いを得るためには、3ではなく0にオフセットを設定する必要があります。 –

関連する問題