2017-01-19 16 views
6

私はC99プログラムを作成しており、複合リテラルを使用することがよくあります。しかし、Emacsはそれらを適切にインデントしていないようです。例えば、ここに手でインデント、簡単な関数EmacsにC99複合リテラルを適切にインデントさせるにはどうすればよいですか?

です:

SDL_Point 
random_point_within_rect(SDL_Rect r) 
{ 
    return (SDL_Point) { 
     .x = (r.x + (rand() % r.w)), 
     .y = (r.y + (rand() % r.h)), 
    }; 
} 

そして、ここでは、私がM-x indent-regionを使用するときには、どのように見えるかです:

SDL_Point 
random_point_within_rect(SDL_Rect r) 
{ 
    return (SDL_Point) { 
     .x = (r.x + (rand() % r.w)), 
      .y = (r.y + (rand() % r.h)), 
      }; 
} 

私の仮説は、Emacsが認識しないということです(type) { ... }の中括弧は、中括弧内の内容がまったく同じので、type x = { ... }と同じ種類のものです。

SDL_Point 
random_point_within_rect(SDL_Rect r) 
{ 
    SDL_Point p = { 
     .x = (r.x + (rand() % r.w)), 
     .y = (r.y + (rand() % r.h)), 
    }; 
    return p; 
} 

ここでインデントを修正するために、構造リテラルや他の方法で複合リテラルを扱う方法がありますか?

ありがとうございました。

+1

、無名の構造体の初期化子を使用することができます – jenesaisquoi

答えて

0

私はその正確な問題についてバグレポートを提出しました。 Emacsはあなたのリストを一連のステートメントとして扱い、コンマはカンマ演算子として扱っていると私は信じています。

あなたはこの問題を回避することができます。あなたのラインの終わりに。あなたはまた、(setqのローカルC-エコー統語情報-Pのトン) `あなたはインデントルールを見ることができます`あなたの仮説が正しいようにあなたがevalの場合、見えすなわち

return (SDL_Point){r.x + rand()%r.w, r.y + rand()%r.h} 
関連する問題