Изменение комментариев из стиля C ++ в стиль C - PullRequest
11 голосов
/ 22 октября 2010

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

Ответы [ 8 ]

14 голосов
/ 22 октября 2010

Подстановка с вашим любимым редактором и регулярное выражение типа s#//(.*)#/*\1 */# должно сделать это ...

4 голосов
/ 22 октября 2010

Если вы ищете что-то более общее, вы также можете использовать для этого инструмент форматирования исходного кода.Для C я раньше использовал uncrustify , и он работал достаточно хорошо.Также могут быть и другие, но я думаю, что uncrustify может изменить комментарии в стиле C ++ на комментарии в стиле C с параметром cmt_cpp_to_c.

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

1 голос
/ 17 июля 2017

Это простая задача на поверхности, но очень сложная проблема для обработки всех краевых случаев. Простое решение легко реализуется в sed:

  sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' < oldfile > newfile

Вы можете настроить это по мере необходимости: у меня есть все пробелы в начале и конце комментария.

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

egrep '//.*/[*]|".*//' oldfile

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

1 голос
/ 15 января 2013

Хорошо, 1,$s#//\(.*\)#/*\1 */# будет работать, только если у вас нет экземпляров комментариев в стиле C ++ внутри (обычно многострочных) комментариев в стиле C, поскольку подстановка преждевременно завершает комментарий в стиле C, оставляя оставшуюся частькомментарий в стиле C без начального /*.

Любой обычный комментарий в стиле C ++, содержащий */, также вызовет проблемы.Это происходит в коде, где плохой программист изменил комментарий в стиле C на комментарий в стиле C ++, не удаляя окончание */.

1 голос
/ 23 октября 2010

Вы можете сделать это с помощью плагина Vim Nerdcommenter .

Это позволяет легко раскомментировать текст, а затем добавить многострочный комментарий, как вы хотите.

1 голос
/ 22 октября 2010

К сожалению, большинство сценариев будут работать только наоборот. Есть достойный метод под названием «РЕКОМЕНДАЦИЯ», но он берет C и преобразует в более новые комментарии в стиле C ++. Я предполагаю, что ваша причина желания сделать это из-за ошибок компилятора с комментариями в стиле C ++. Обычная причина этого - строка, которая использует комментарий в стиле C с комментарием в стиле C ++. Возможно, поиск этого конкретного сценария избавит вас от необходимости возвращаться к комментариям старого стиля. Если нет, к сожалению, вам, возможно, придется сделать это вручную. (Я молюсь, чтобы вы этого не делали, потому что я знаю, как это скучно!)


Рекомендуемая ссылка: http://people.sc.fsu.edu/~jburkardt/cpp_src/recomment/recomment.html
0 голосов

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

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

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

0 голосов
/ 09 января 2019

Для всех кодеров! Приведенное ниже решение работает с Eclipse, Sublime и другими редакторами, которые поддерживают регулярные выражения.

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

вуаля!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...