Переформатировать фигурные скобки C++, не изменяя добавление отступа?

Вы можете использовать QMessageBox :: about для простых диалогов, или написать свой собственный подкласс QDialog, если вам нужно что-то более особенное / необычное.

6
задан emk 12 June 2009 в 12:42
поделиться

6 ответов

Вот однострочник Perl, который должен делать то, что вы хотите.

perl -pi.bak -e 'BEGIN { undef $/; } s/\s*?(\s?\/\/.*)?\r?\n\s*{/ {\1/g; s/}(\s?\/\/.*)?\r?\n\s*else\b(.*)/} else\2\1/g;'

Он превращает это:

int main(int argc, char *argv[])
{
    int something = 0;
    if (something)    // 5-12-2007
    {
        printf("Hi!\n");
    }
    else   // 5-13-2007
    {
        printf("Bye\n");
    }
    return 0;
}

в это:

int main(int argc, char *argv[]) {
    int something = 0;
    if (something) { // 5-12-2007
        printf("Hi!\n");
    } else { // 5-13-2007
        printf("Bye\n");
    }
    return 0;
}
7
ответ дан 8 December 2019 в 16:09
поделиться

Вам действительно стоит подумать дважды, а возможно и трижды, прежде чем делать это. Это полностью уничтожит историю изменений вашей системы управления исходным кодом в момент изменения. Вы используете систему контроля исходного кода, не так ли?

3
ответ дан 8 December 2019 в 16:09
поделиться

Команда UNIX Indent ( http://en.wikipedia.org/wiki/Indent_ (Unix) ) (доступна для ПК от GNU) имеет миллион вариантов для настройте форматирование так, как вам нравится.

2
ответ дан 8 December 2019 в 16:09
поделиться

Раньше я решал подобные проблемы, сначала запуская какой-нибудь инструмент, например astyle, чтобы сделать 95% того, что мы хотели, а затем писал скрипт Perl или Python поверх результата, чтобы закончить оставшиеся 5%. Попробуйте, всегда полезно знать свои регулярные выражения. :)

0
ответ дан 8 December 2019 в 16:09
поделиться

Разве не справиться с задачей, набитая простыми регулярными выражениями? Например (\). ? \ N. ? \ {) -> (\) \ {), чтобы удалить пробел между закрывающей скобкой и открывающейся фигурной скобкой.

1
ответ дан 8 December 2019 в 16:09
поделиться
perl -ei '$/=undef;while(<>){s/}\s*?(\s*\/\/^[\r\n]*)?\r?\n\s*else/} else$1/gm;s/(\s*\/\/[^\r\n]*)?\r?\n\s*{/ {$1/gm;print;}' yoursourcefile.cpp

Это сначала изменяет } else на } else , затем удаляет конец строки из <пробел> {.

Чтобы применить это к дереву исходных текстов, используйте find и xargs :

find . -name \*.cpp -print0 | xargs -0 perl -ei '$/=undef;while(<>){s/}\s*?(\s*\/\/^[\r\n]*)?\r?\n\s*else/} else$1/gm;s/(\s*\/\/[^\r\n]*)?\r?\n\s*{/ {$1/gm;print;}'
2
ответ дан 8 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: