Ответ 1
Я не верю, что есть такой инструмент. В С порядок декларирования и определения вообще не имеет значения. Конечно, существует исключение цикла зависимостей (a()
вызывает b()
, который вызывает a()
), но когда функции объявлены в файле заголовка, даже это не проблема, так как все объявления фактически являются "вперед", необходимые для обработки циклов зависимостей.
Таким образом, порядок определений в блоке трансляции по существу является вопросом вкуса и стиля. Таким образом, это не особенность, которую дизайнеры-редакторы склонны решать, поскольку усилия по созданию функций, общих и достаточно мощных, чтобы быть полезными для преобладания пользователей, могут считаться непомерно большими. Подумайте, сколько времени потребовалось для (не программируемых) редакторов, которые обычно имеют гибкие и мощные функции автоматического отступов и переформатирования.
Существует также риск нарушения логики, грамматики или удобочитаемости кода при его реорганизации автоматически. Например, если комментарии лежат между определениями функций, как инструмент узнает, идет ли комментарий с определенной функцией или с группой функций или с помощью функции выше? И как @Yuri упоминает выше, что относительно функций внутри # if/# else/# endif блоков? А как насчет тонких случаев, таких как макросы, которые расширяются до функций или директив #include, зажатых между определениями функций? Я полагаю, что функция переупорядочения может ограничивать свой домен простым случаем, но если дело становится слишком простым, его апелляция соответственно ограничена и не публикуется публично или широко.
Все, что было сказано, я думаю, что с помощью богатого набора инструментов в такой возможности такой функции не будет слишком сложно реализовать, хотя, если бы я это делал, я ожидал, что при первой непредвиденной сложности я бы подумал, если было бы проще просто отредактировать исходные файлы вручную. В конце концов, многострочная вырезка и вставка довольно легкие.