У меня есть исходный файл C с комментариями в стиле //
(С++). Я хочу изменить все комментарии на старый стиль /* */
(C). Есть ли способ сделать это, используя существующий script?
Изменение комментариев от стиля С++ до стиля C
Ответ 1
Подстановка с вашим любимым редактором и регулярное выражение типа s#//(.*)#/*\1 */#
должно сделать это...
Ответ 2
Если вы ищете нечто более общее, вы также можете использовать инструмент форматирования исходного кода для этого. Для C я раньше использовал uncrustify, и он работал достаточно хорошо. Могут быть и другие, но я думаю, что uncrustify может изменять комментарии стиля С++ к комментариям стиля C с помощью параметра cmt_cpp_to_c
.
Конфигурация может быть немного сложной, но если вы просто используете пример конфигурационного файла и изменяете только интересующий вас материал, он может сделать то, что вы хотите.
Ответ 3
К сожалению, большинство скриптов будут работать только наоборот. Существует достойный вариант "RECOMMENT", но он принимает C и преобразует в новые комментарии стиля С++. Я предполагаю, что ваша причина для этого - из-за ошибок компилятора с комментариями стиля С++. Обычной причиной этого является строка, которая использует комментарий в стиле C с комментарием стиля С++. Возможно, поиск этого конкретного сценария устранит вашу потребность преобразовать обратно в более старый стиль комментариев. Если нет, то, к сожалению, вам придется делать это вручную. (Я молюсь, чтобы вы не знали, насколько это утомительно!)
Ссылка: http://people.sc.fsu.edu/~jburkardt/cpp_src/recomment/recomment.html
Ответ 4
Вы можете сделать это с помощью плагина Vim Nerdcommenter.
Это упрощает раскомментацию текста, а затем добавляет многострочный комментарий, как вы хотите.
Ответ 5
Ну, 1,$s#//\(.*\)#/*\1 */#
будет работать, только если у вас нет экземпляров комментариев в стиле С++ внутри (как правило, многострочных) комментариев в стиле C, поскольку подстановка преждевременно завершает комментарий в стиле C, оставляя оставшуюся часть комментарий в стиле C без запуска /*
.
Любой обычный комментарий в стиле C++, имеющий */
внутри него, также вызовет проблемы. Это происходит в коде, где плохой программист изменил комментарий в стиле C к комментарию стиля С++ без удаления конца */
.
Ответ 6
Это простая проблема на поверхности, но очень сложная проблема для обработки всех случаев краев. Простое решение легко реализуется в sed:
sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' < oldfile > newfile
Вы можете настроить это по мере необходимости: у меня есть все пробелы в начале и конце комментария.
То, что не обрабатывается, это комментарии нового стиля со встроенными комментариями старого стиля (как отмечали другие). То, что это действительно запутывает, это строки с двойными чертами в них - они не являются комментариями, но без разбора строк они будут изменены так, как если бы они были. Проверьте их:
egrep '//.*/[*]|".*//' oldfile
Если вы нажмете любой из них, потребуется ручная коррекция. Любая попытка автоматизировать его без фактического анализа файла просто создаст новые и более запутанные краевые условия, хотя вы можете распознать шаблон для взлома, который достаточно хорош для вашей ситуации.
Ответ 7
Для всех кодеров там! Приведенное ниже решение работает с Eclipse, Sublime и другими редакторами, которые поддерживают регулярные выражения.
- Воспитание найти и заменить в возвышенном
- Убедитесь, что опция регулярного выражения включена (Alt + R)
- Введите в Find: //(.*)
- Введите в Заменить /*\1 */
вуаля!
Ответ 8
Карта альтернативных разделов Vim Nerdcommenter
Если вы делаете: <leader>ca
некоторых типов файлов есть альтернативные стили комментариев, и, в частности, для C/C++ это позволяет переключаться между //
и /*
, протестировано в 2.5.2.
Затем вас также может заинтересовать "режим сексуальных комментариев", используемый с <leader>cs
который делает хорошие многострочные комментарии на C, как упомянуто по адресу: NERD commenter: Как закомментировать диапазон