Tengo un archivo fuente C que tiene comentarios en el estilo //
(C++). Quiero cambiar todos los comentarios al antiguo estilo /* */
(C). ¿Hay alguna manera de hacer esto usando un script existente?Cambiando los comentarios del estilo C++ al estilo C
Respuesta
Una sustitución contigo editor favorito y una expresión regular, como debe hacerlo s#//(.*)#/*\1 */#
...
Solo preste atención a 'x = 0; ///* era x = 1; */off-by-one error corregido' – pmg
no funciona para mí en vi (arroja 'Patrón no encontrado: //(.*)') ¿Qué hace hash? –
@N 1.1: El hash es solo un marcador de posición, puede ser cualquier carácter. Por lo general, es una barra diagonal, pero cuando tienes barras en tu patrón, es más fácil usar un delimitador diferente de lo que es para escapar de todas tus barras diagonales. 's/foo/bar /' es equivalente a 's # foo # bar #', 'sXfooXbarX', y' s, foo, bar, 'etc. –
Desafortunadamente la mayoría de las secuencias de comandos sólo funcionará al revés. Hay uno decente llamado "RECOMEND", pero toma C y se convierte a los comentarios más nuevos del estilo de C++. Me imagino que su razón para querer hacer esto se debe a los errores del compilador con los comentarios de estilo C++. La causa habitual de esto es una línea que utiliza un comentario estilo C con un comentario de estilo C++. Quizás buscar ese escenario en particular eliminaría su necesidad de volver a convertirlo en comentarios de estilo más antiguo. Si no, lamentablemente deberías hacerlo a mano. (Oro para que no lo hace ya que sé lo tedioso que puede ser!)
recomiendo Enlace: http://people.sc.fsu.edu/~jburkardt/cpp_src/recomment/recomment.html
Lo tendré en cuenta cuando lo necesite. Es posible que desee proporcionar un enlace a RECOMENDACIÓN en su respuesta. –
Los scripts que hacen esto al revés son aterradores. '/ * foo */bar ++;' no se puede traducir correctamente sin cambiar la numeración de líneas. – nategoose
¡Me disculpo por olvidar el enlace! ¡He actualizado mi respuesta con el enlace en la parte inferior! –
Si usted está buscando algo un poco más genérica, también se puede utilizar una herramienta de formateo de código fuente para esto. Para C, he usado uncrustify anteriormente y funcionó razonablemente bien. También puede haber otros, pero creo que la opción no crítica puede cambiar los comentarios del estilo C++ en comentarios del estilo C con el parámetro cmt_cpp_to_c
.
La configuración puede ser un poco intimidante, pero si solo usa el archivo de configuración de ejemplo y cambia solo las cosas que le interesan, podría hacer lo que quiera.
Puede hacerlo con el complemento Vim Nerdcommenter.
Esto hace que sea fácil descomentar el texto y luego agregar un comentario de varias líneas como desee.
Bueno, 1,$s#//\(.*\)#/*\1 */#
funcionará solo si no tiene instancias de comentarios en estilo C++ dentro de (normalmente multilíneas) comentarios al estilo C, ya que la sustitución finalizará prematuramente el comentario al estilo C, dejando la porción restante del Comentario de tipo C sin inicio /*
.
Cualquier comentario regular de estilo C++ que tenga */
dentro de él también causará problemas. Esto sucede en el código donde un programador incorrecto cambió un comentario de estilo C a un comentario de estilo C++ sin eliminar la terminación */
.
Este es un problema simple en la superficie, pero un problema muy difícil para manejar todos los casos extremos. La solución más sencilla es fácil de implementar en la sed:
sed -e 'sX// *\(.*[^ ]\) *$X/* \1 */X' <oldfile> newfile
Se puede ajustar según sea necesario que: Tengo que comer todos los espacios al principio y al final del comentario.
Lo que no se soluciona son los comentarios de estilo nuevo con comentarios incrustados al estilo antiguo (como han señalado otros). Lo que esto realmente arruina es cadenas con doble barra - no son comentarios, pero sin analizar las cadenas, se verán modificados como si lo fueran. Verifique los siguientes:
egrep '//.*/[*]|".*//' oldfile
Si tocas cualquiera de ellos, necesitarán una corrección manual. Cualquier intento de automatizarlo sin analizar realmente el archivo solo creará nuevas y más intrincadas condiciones de borde, aunque es posible que reconozca un patrón para un truco que sea lo suficientemente bueno para su situación.
- 1. ¿Los comentarios de C++ se consideran estilo incorrecto en C?
- 2. Haciendo caso omiso de los comentarios del estilo C en un analizador del combinador de Scala
- 3. Comentarios XML de estilo C# en Delphi 2010
- 4. C# Acceso al estilo del indexador de propiedades del objeto
- 5. convirtiendo cadena de estilo c a cadena de estilo C++
- 6. comentarios de estilo de caja con yasnippet
- 7. Guía de estilo para C#?
- 8. C++ en lugar de C-estilo arroja
- 9. ¿Buen libro sobre estilo C#?
- 10. dificultades para obtener los comentarios de c-estilo en flexión/lex
- 11. Elementos del estilo Scala?
- 12. Mensajes al estilo de Smalltalk frente a las funciones de estilo C
- 13. Simulando C-estilo para los bucles en Python
- 14. heredar el estilo del estilo predeterminado
- 15. Sancionar los comentarios del bloque C en Emacs
- 16. Qué estilo usar al nombrar tipos en C
- 17. estilo COP + control de ReSharper comentarios
- 18. Comentarios de Xcode autocompletado (estilo appledoc)
- 19. Programación funcional en C++ 11, estilo F #
- 20. buen estilo c al verificar muchos valores devueltos
- 21. Ideas sobre la implementación de los comentarios al estilo Stack Overflow
- 22. ¿Hay un lenguaje de estilo C++ sin adornos de C?
- 23. C# Agregar estilo a un control
- 24. Herramienta para encontrar moldes de estilo C
- 25. Decapado de estilo Python para C++?
- 26. C# Estilo de Windows 7/Vista ListView
- 27. ¿Cómo puedo "falsificar" los atributos de estilo C# en Ruby?
- 28. Buena C de estilo de cabecera
- 29. ¿Este es un buen estilo de C#?
- 30. ¿Por qué no puedo usar comentarios de estilo // en mi código C?
¿Está utilizando una versión de C anterior a C99? Según mi experiencia y la página wiki (http://en.wikipedia.org/wiki/C_(programming_language)) los comentarios de estilo '//' están permitidos C99 en adelante. Si el estándar de codificación tiene algún límite en la longitud de la línea (por ejemplo, Google Coding Style recomienda un máximo de 80 caracteres), también debes tener cuidado con eso. Puede haber casos como lo que pmg menciona a continuación. En general, tengo curiosidad por saber cuál es tu motivación. – Arun
Una buena razón para hacer esto es obtener código para compilar limpiamente con compiladores que no admiten comentarios de estilo de C++ o quejarse de ellos con la versión específica de C especificada. – nategoose
Se espera que escriba un código que cumpla con ANSI tanto como sea posible. Así que estoy marcando todos los errores que 'gcc -ansi' está apareciendo. –