Este proyecto incluye herramientas y listas para descubrir todos los indicadores de advertencia que el compilador de clang y la colección de compiladores GNU tienen para lenguajes familiares C (C, C ++ y Objective-C). Esto también muestra todos los alias y banderas de advertencia que una determinada bandera habilita (prefijo con el personaje "#") para que pueda ver fácilmente qué bandera está habilitada por qué. También hay banderas de advertencia que no hacen nada por razones de compatibilidad o deprecación. Se sufre con el texto del "# Switch Dummy Switch".
El propósito de estas colecciones es facilitar el uso de las herramientas de análisis de código estático que proporcionan los compiladores.
Clang incluye una bandera -Weverything
, que no se muestra en estas listas, que permite todas las advertencias. La documentación de Clang proporciona referencia para algunos de los indicadores de diagnóstico en Clang.
Si necesita una lista completa de opciones de advertencia de GCC, para una versión específica de GCC que tiene, puede ejecutar GCC con gcc --help=warnings
para obtener esa lista. De lo contrario, algunas listas simples de opciones de advertencia de GCC están disponibles a continuación:
Un caso de uso para este tipo de listas es ver qué diferencias hay entre diferentes compiladores y versiones de compiladores. He puesto a disposición diferencias de bandera del compilador rudimentario entre dos versiones de compiladores consecuentes como archivos DIFF, pero para diferencias más específicas debe utilizar algún programa DIFF (visual), como se muestra a continuación:
Esto utiliza ANTLR como generador de analizador con algunos compatibles con el código de Python para analizar los indicadores de advertencia de los archivos de datos de opciones del compilador reales. Otros requisitos están siguiendo (más sus dependencias):
Después de haber instalado todos los requisitos y puede ejecutar ANTLR con el comando antlr4
, solo use los siguientes comandos en parsers/
directorio para generar estas listas usted mismo:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
Y obtendrá la lista de todas las banderas de advertencia individuales y sus dependencias que se encuentran en la versión del compilador solicitado.
Para generar listas filtradas, puede usar interruptores --top-level
y --unique
.
--top-level
no incluye advertencias habilitadas por algún otro interruptor en la lista.--unique
enumera todas las advertencias sin ninguna información qué otras advertencias permiten. Las diferencias en esta página se crean a partir de estos archivos. Hay algunas pruebas unitarias que prueban la funcionalidad de bajo nivel. Puede ejecutar el tiempo con el comando ninja test
en parsers/
directorio para verificar que pasen las pruebas unitarias.
Cuando el analizador obtiene un cambio que afecte el formato u otro resultado para múltiples archivos, estas listas de advertencia deben recrearse. Existen los scripts process-clang-git.sh
y process-gcc-git.sh
que toman la raíz del repositorio Git como su primer parámetro y aplican todas las variantes diferentes de estos comandos para crear archivos de texto finales.