Изменение комментариев от стиля С++ до стиля C

У меня есть исходный файл C с комментариями в стиле // (С++). Я хочу изменить все комментарии на старый стиль /* */ (C). Есть ли способ сделать это, используя существующий script?

Ответ 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 и другими редакторами, которые поддерживают регулярные выражения.

  1. Воспитание найти и заменить в возвышенном
  2. Убедитесь, что опция регулярного выражения включена (Alt + R)
  3. Введите в Find: //(.*)
  4. Введите в Заменить /*\1 */

вуаля!

Ответ 8

Карта альтернативных разделов Vim Nerdcommenter

Если вы делаете: <leader>ca некоторых типов файлов есть альтернативные стили комментариев, и, в частности, для C/C++ это позволяет переключаться между // и /*, протестировано в 2.5.2.

Затем вас также может заинтересовать "режим сексуальных комментариев", используемый с <leader>cs который делает хорошие многострочные комментарии на C, как упомянуто по адресу: NERD commenter: Как закомментировать диапазон