todas salida que procesador preprocesador lenguaje las incluidos funciones entrada encuentran directivas directiva define cuál cual cabecera archivos c++ code-cleanup clang-format

c++ - salida - Sangrar las directivas del preprocesador con formato clang



directivas del preprocesador c++ (3)

Estoy trabajando en un proyecto de c ++ donde estoy usando una gran cantidad de #pragma omp . Utilizo el maravilloso formato clang para el orden, pero siempre elimina la sangría de todas las directivas de preprocesador. ¿Hay alguna manera de cambiar ese comportamiento? ¿O hay otra herramienta de formato que sea más recomendable? ¿O debería evitar usar estas herramientas?


A partir de la versión 6.0, se puede utilizar la opción IndentPPDirectives . El uso se describe en esta revisión .

Usando IndentPPDirectives: None resulta en:

#if FOO #if BAR #include <foo> #endif #endif

Mientras que IndentPPDirectives: AfterHash da:

#if FOO # if BAR # include <foo> # endif #endif


Es posible que desee parchearlo usted mismo y realizar una solicitud de extracción.

No es tan difícil, una vez hice una solicitud similar de atracción mundana. El código de formato clang es bastante ordenado. El formato Clang ya maneja los comentarios de código de la forma que desee, alineándolos con el código circundante (al menos tiene una opción para habilitar esto), por lo que hacer un parche para tratar ciertas directivas de PP de la misma manera debería ser sencillo.

Alternativamente, puede escribir el parche usted mismo y compilarse desde la fuente con la opción adicional, para usar en su proyecto. También hice esto antes de que decidiera enviarles el parche.

En serio, me tomó solo unas pocas horas descubrir cómo hacerlo, su código es mucho más limpio que el código de muchos otros proyectos de código abierto.


Ha llegado tarde pero esta es la solución que estás buscando. Formatea el pragma junto con el bloque de código. Puedes usar esto antes de que finalmente apoyen la muesca de pragma.

https://github.com/MedicineYeh/p-clang-format

El concepto principal es reemplazar la cadena para que el formateador use las reglas "correctas" en estos pragmas. El ejemplo motivador es el siguiente.

# Replace "#pragma omp" by "//#pragma omp" sed -i ''s/#pragma omp/////#pragma omp/g'' ./main.c # Do format clang-format ./main.c # Replace "// *#pragma omp" by "#pragma omp" sed -i ''s///// *#pragma omp/#pragma omp/g'' ./main.c