Посоветуйте хороший форматтер кода

Тема в разделе "Флудилка", создана пользователем Megakoteyka, 24 окт 2013.

  1. Megakoteyka

    Megakoteyka Оракул Модератор

    Получил в наследство проект объемом ~250КБ исходников на C.
    Практически весь код написан в таком стиле:
    Код (Text):
    void main()
    {
    int i,j;
    int d,d1;
    ...
    for(i=0;i<somevalue;i++) buffer[i]=0x00;
    ...
    if(...)
    {
    func1();
    func2();
    ...
    funcN();
    }
    else
    {
    func3();
    func4();
    }
    ...
    if(...) func5(0xffff,&buffer[0],512);
    Первым делом нужно этот кошмар привести в читаемый вид, иначе можно получить вывих мозга.
    Требуется форматтер, который сделает нормальную лесенку и расставит пробелы, при этом не испортив кодировку.
    http://prettyprinter.de/ в дауне.
    http://tools.arantius.com/tabifier и http://ctrlq.org/beautifier/ выдают лажу.

    Хэлп! SOS!
     
  2. roggedhorse

    roggedhorse Гик

    Atmel Studio 6
    И заодно прогнать наследство через cppcheck
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Она же наверняка потребует, чтобы код сперва собрался и только потом станет его форматировать (аналогично MS Visual Studio)?
    Пока прогнал через AStyle, появились отступы, но не появилось пробелов.
    И вещи вроде for(i=0;i<somevalue;i++) buffer=0x00; остались в одну строку.
    Исходники изначально из Code Composer Studio.
     
  4. roggedhorse

    roggedhorse Гик

    Не потребует

    Фича называется Edit/Advanced/Format document (or Format Selected)

    Помимо прочего Studio хороша тем, что там есть эмулятор МК. Можно отлаживать и оптимазить код не имея перед собой железки.

    Конечно, если вы работаете над ардуиновским проектом...
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Увы, код под сигнальный процессор от Texas Instruments, IDE у них ужасно кривая и неудобная, еще и компилятор иногда неправильно компилирует - одно сплошное удовольствие :)
    Спасибо, попробую.
     
  6. Unixon

    Unixon Оракул Модератор

    Есть еще в Code::Blocks IDE вполне достойный плагин для форматирования кода.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    В моей версии Code::Blocks сидит AStyle, я через него уже вчера попробовал прогнать исходники.
    К сожалению, строки типа if(Adr>0) Adr=Adr-1; так и остались в неизменном виде - переноса с отступом не добавилось, пробелов тоже :(
    prettyprinter.de все еще лежит. У него зеркала случайно нигде нету?
     
  8. Unixon

    Unixon Оракул Модератор

    Там же еще настроек много, можно стиль форматирования поменять и по мелочи подстроить.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Нашел нужную галку, ощутил блаженство :) Спасибо!

    Осталось найти великий замысел в строчках типа этой:
    Код (Text):
        for(i = 0; i < 512; i++)
            buf[i] = (0 & 0xff);
    :D
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    Не нашел пока только способа превратить
    Код (Text):
    if(mode == 0) k1 |= 0x08;
    в
    Код (Text):
    if(mode == 0)
        k1 |= 0x08;
    Перерыл весь мануал.
    В остальном все красиво.
     
    Последнее редактирование: 25 окт 2013
  11. Unixon

    Unixon Оракул Модератор

    А зачем?

    Ну... эмм... а я вот пишу так:

    Код (Text):

    if ((0 == mode) && (x > y)) doSomething();
     
    Код (Text):

    if ((0 == mode) && (x > y))
    {
     doSomething();
    }
     
    Код (Text):

    if ((0 == mode) && (x > y))
    {
     doSomething();
     doSomethingElse();
    }
     
    Преобладает 2 (3) вариант. У вас получается интересный гибрид - и точку отладки можно в цикл поставить и строчки под скобки не тратятся.
     
  12. roggedhorse

    roggedhorse Гик

    Я давно так не пишу.
    С тех пор, как убил около недели на поиск бага....
    Допиливал либу. Добавил строку внутрь if.

    Код (Text):
    if(mode == 0)
        k1 |= 0x08;
        k2 <<= 3;
     
    Позднее оказалось, что думал, что добавил внутрь.
    Из-за отсутствия скобок вторая строка оказалась за пределами конструкции if и пошло поехало.

    С тех пор только так:
    Код (Text):

    if (mode == 0) {
        k1 |= 0x08;
        k2 <<= 3;

    } else {
        k1 &= ~0x08;

    }