如何让Emacs正确缩进C99复合文字?

时间:2017-01-19 06:23:51

标签: c emacs formatting indentation c99

我正在编写C99程序并经常使用复合文字。但是,Emacs似乎没有正确地缩进它们。

例如,这是一个简单的函数,手工缩进:

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;
}

有没有办法可以让Emacs处理复合文字,如结构文字,或者其他一些方法来修复缩进?

感谢。

1 个答案:

答案 0 :(得分:0)

我为这个确切的问题提交了一份错误报告;我相信emacs会将您的列表视为一系列语句,将逗号视为逗号运算符。

你可以通过放置来解决问题;在你的行结束。您还可以使用未命名的struct初始化器,即

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