Замените комментарии стиля C комментариев стиля C++

На основании вашего комментария str.replace должен работать для вас:

>>>
>>> str1 = "# This is a Phone Number"
>>> str2 = str1.replace("#", "/*") + " */"
>>>
>>> str2
'/* This is a Phone Number */'
>>>
7
задан Lii 28 August 2018 в 09:04
поделиться

9 ответов

Этот инструмент делает задание: http://people.sc.fsu.edu/~burkardt/cpp_src/recomment/recomment.html

RECOMMENT является программой C++, которая преобразовывает комментарии стиля C в комментарии стиля C++.

Это также обрабатывает все нетривиальные случаи, упомянутые другими людьми:

Этот код включает предложения и кодирование, обеспеченное 28 апреля 2005 Steven Martin JDS Uniphase, Мельбурн Флорида. Эти предложения позволяют программе игнорировать внутреннее содержание строк, (который, могло бы иначе казаться, начал бы или закончил бы комментарии), чтобы обработать строки кода с запаздывающими комментариями и обработать комментарии с запаздывающими битами кода.

17
ответ дан 6 December 2019 в 05:08
поделиться

Это не тривиальная проблема.

int * /* foo 
  /* this is not the beginning of a comment.

int * */ var = NULL;

Чем Вы хотите заменить это? Любая реальная замена требует иногда строк разделения.

int * // foo
  // this is not the beginning of a comment.
// int *
var = NULL;
12
ответ дан 6 December 2019 в 05:08
поделиться

Как делают Вы намереваетесь обработать такие ситуации:

void CreateExportableDataTable(/*[out, retval]*/ IDispatch **ppVal)
{
 //blah
}

Отметьте комментарий в parens... это - распространенный способ зарегистрировать вещи в сгенерированном коде или упомянуть значения параметров по умолчанию в реализации класса, и т.д. Я обычно - не поклонник такого использования комментариев, но они распространены и должны быть рассмотрены. Я не думаю, что можно преобразовать их в комментарии стиля C++, не делая некоторых тяжелых взглядов.

5
ответ дан 6 December 2019 в 05:08
поделиться

Почему Вы не пишете приложение C для парсинга своих собственных исходных файлов? Вы могли найти, что/* комментирует разделы */с относительно легким запросом Regex. Вы могли затем заменить символы новой строки символом новой строки + "//".

Так или иначе, просто мысль. Удача с этим.

0
ответ дан 6 December 2019 в 05:08
поделиться

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

#!/usr/bin/python

import sys

out = ''
in_comment = False

file = open(sys.argv[1], 'r+')
for line in file:
    if in_comment:
        end = line.find('*/')
        if end != -1:
            out += '//' + line[:end] + '\n'
            out += ' ' * (end + 2) + line[end+2:]
            in_comment = False
        else:
            out += '//' + line
    else:
        start = line.find('/*')
        cpp_start = line.find('//')
        if start != -1 and (cpp_start == -1 or cpp_start > start):
            out += line[:start] + '//' + line[start+2:]
            in_comment = True
        else:
            out += line

file.seek(0)
file.write(out)
2
ответ дан 6 December 2019 в 05:08
поделиться

Если Вы пишете приложение/сценарий для обработки исходных файлов C, вот некоторые вещи остерегаться:

  • символы комментария в строках
  • символы комментария посреди строки (Вы не могли бы хотеть разделять строку кода),

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

0
ответ дан 6 December 2019 в 05:08
поделиться

Я с людьми, которые прокомментировали в Вашем вопросе. Почему делают это? Просто оставьте его.

это напрасно тратит время, добавляют бесполезные фиксации к управлению версиями, риску завинчивания

Править: Добавление деталей из комментариев от OP

Фундаментальная причина предпочтения комментария в стиле С++ состоит в том, что можно прокомментировать блок кода, который может иметь комментарии в нем. Если тот комментарий находится в C-стиле, этот block-comment-out кода не является прямым. – неизвестный (Yahoo)

это могло бы быть справедливой/хорошо вещью хотеть сделать, но у меня есть два комментария об этом:

  • Я не знаю ни о ком, кто рекомендовал бы изменять весь существующий код - который является предпочтением нового кода. (IMO)
  • Если Вы чувствуете потребность "закомментировать код", (другая сомнительная практика) затем можно сделать это по мере необходимости - не прежде

Также кажется, что Вы хотите использовать комментарии c-стиля для блокирования раздела кода? Или Вы собираетесь использовать//для блокирования многих строк?

Одна альтернатива является препроцессором #ifdef для той ситуации. Я съеживаюсь в этом, но это настолько же плохо как комментирует строки/блоки. Ни одного нельзя оставить в производственном коде.

4
ответ дан 6 December 2019 в 05:08
поделиться

Существует несколько предположений, что Вы хотели бы испытывать:

a) Напишите свой собственный код (C/Python / любой язык, который Вы любите) заменять комментарии. Что-то вроде того, какой сказанный regex или это наивное решение 'мог' бы работать: [Запрещая случаи как один rmeador, Darron отправил]

 
for line in file:
    if line[0] == "\*":
       buf = '//' + all charachters in the line except '\*'
       flag = True
    if flag = True:
       if line ends with '*/':
          strip off '*/'
          flag = False
       add '//' + line to buf

b) Найдите, что инструмент делает это. (Я буду искать некоторых и сообщение, если я найду их.)

c) Почти весь современный IDE (при использовании одного) или текстовые редакторы имеет автоматическую функцию комментария. Можно затем вручную открыть каждый файл, выбрать строки комментария, решить, как обработать ситуацию и прокомментировать, стиль C++ с помощью акселератора (скажите что Ctrl + M). Затем можно просто 'Найти и заменить' все "/*" и "* /", снова с помощью суждения. Мне настроили Gedit, чтобы сделать это использование "Комментария к коду' плагин. Я не помню способ, которым я сделал это в Vim от руки. Я уверен, что этот может быть найден легко.

  • 0
    ответ дан 6 December 2019 в 05:08
    поделиться

    Если существуют только "несколько файлов", действительно необходимо записать программу? Открытие его в текстовом редакторе могло бы добиться цели более быстрый на практике, если нет целая загрузка комментариев. emacs имеет a comment-region управляйте, чтобы (неудивительно) прокомментировал регион, таким образом, это просто был бы случай отказа от оскорбления '/*' и '* / '.

    0
    ответ дан 6 December 2019 в 05:08
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: