Функция переупорядочения в файле c на основе файла заголовка c - PullRequest
14 голосов
/ 21 ноября 2011

Существует ли какой-либо инструмент для автоматического изменения порядка файлов .c на основе .h?

Например, foo.h

void function1();
void function2();
void function3();

А foo.c

void function2(){}
void function1(){}
void function3(){}

Могу ли я изменить порядок как

void function1(){}
void function2(){}
void function3(){}

Кстати, я использую Vim в Ubuntu.

1 Ответ

2 голосов
/ 27 ноября 2011

Я не верю, что есть такой инструмент.В C порядок объявления и определения обычно не имеет значения.Конечно, существует исключение из цикла зависимостей (a() вызывает b(), который вызывает a()), но когда функции объявляются в заголовочном файле, даже это не является проблемой, поскольку все объявления фактически являются "Для обработки циклов зависимостей необходимы «прямые» объявления.

Таким образом, порядок определений в единице перевода по существу зависит от вкуса и стиля.Таким образом, это не та особенность, к которой склонны обращаться дизайнеры-редакторы, поскольку усилия по созданию общих и мощных функций, достаточных для преобладания пользователей, могут считаться чрезмерно большими.Подумайте, сколько времени понадобилось (непрограммируемым) редакторам для того, чтобы обычно иметь гибкие и мощные функции автоматического отступления и переформатирования.

Существует также риск нарушения логики, грамматики или читабельности кода при его автоматической реорганизации.,Например, если комментарии находятся между определениями функций, как инструмент узнает, идет ли комментарий с определенной функцией, или с группой функций, или с функцией выше?И как @Yuri упоминает выше, как насчет функций внутри # if / # else / # endif блоков?А как насчет тонких случаев, таких как макросы, которые расширяются до функций или директивы #include, зажатые между определениями функций?Я полагаю, что функция переупорядочения может ограничить его домен простым делом, но если дело становится слишком простым, его апелляция, соответственно, ограничивается, и она не публикуется публично или широко.

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

...