dudo encontrará una herramienta como esta fuera de la plataforma. Entonces, necesitarías una herramienta personalizada. No desea intentar hacer esto con algún método de hacking de cadenas (por ejemplo, Perl) porque los detalles de precisión de analizando C y C++ son mucho más allá de lo que puede hacer de esta manera. Si no te importa hackeo de cuerdas dañar sus archivos a veces, tal vez puede salirse con la suya.
Mi empresa es DMS Software Reengineering Toolkit podría utilizarse para hacer esto de forma fiable una advertencia.
DMS es un motor genérico para analizar, analizar y transformar el código fuente mediante la tecnología del compilador parametrizada por definiciones de lenguaje explícitas. DMS tiene definiciones de lenguaje robustas para muchos idiomas, incluyendo C y C++ en variedad de dialectos. Con los frontales DMS C o C++, puede analizar el código fuente , compilar estructuras de datos de compilador llamadas AST, realizar análisis sobre el código, transformar los AST, y luego regenerar el código compilable, incluidos los comentarios y todas las directivas de preprocesador.
La advertencia tiene que ver con el código fuente de análisis que contiene las directivas del preprocesador: tienen que estar bien estructuradas [por ej. #ifdef #endif necesita anidarse alrededor de otras instrucciones como el normal, etc., en lugar de usarse en un límite de declaración. Esto sucede algo en el código C; mucho menos en código C++. Nuestra experiencia es que si está dispuesto a modificar su código C poco, puede hacer que este problema en particular desaparezca.
Para su tarea específica, que lo hacen más o menos como la respuesta para Toolworks científicos descritos:
- Elija una unidad de compilación, y analizarlo usando DMS. Debe proporcionar la misma información que proporciona el compilador, para que pueda localizar los archivos de encabezado, etc.
- DMS produce un AST tanto para su unidad de compilación como para todos los archivos de encabezado.
- Recorre los AST para extraer el orden de las declaraciones en los encabezados y la unidad de compilación.
- Restructure el árbol unidad de compilación de acuerdo con el orden derivado de 3)
- embellecida la unidad de compilación resultante AST
[A razón de hacer esto con DMS en lugar de Toolworks científica es que DMS está diseñado para parse/transform/regenerate code, mientras que SciTool en mi humilde opinión realmente solo está diseñado para analizar y analizar. DMS proporciona acceso a los detalles precisos necesarios para la transformación que SciTools no hace, al menos no la última vez que miré].
Se producirán complicaciones debido a condicionales, macros, espacios de nombres, ... pero tendrá que decidir la política para la resolución. Por ejemplo, si un archivo de encabezado tiene un #if ... #else .... #endif, y las declaraciones en la cláusula then tienen un orden diferente del que tienen en la cláusula else, ¿cuál es el orden deseado? ¿Qué pasa si una definición de función es creada por una macro en el encabezado? Pero, todo esto es lo que hace que construya una herramienta real, er, diversión.
Mi opinión personal es que esto parece mucho trabajo para el efecto que está obteniendo. Si hace todo esto, ¿cuánto mejor será su proceso de ingeniería de software? Normalmente usamos DMS para verificar si hay errores de codificación o cambiar el código de manera que las personas no pueden (por ejemplo, insertar instrumentación de tiempo de ejecución temporalmente o consejos tipo AOP), donde está claro que un motor mecánico tiene rentabilidad.
¿Qué debería hacer esta herramienta con los elementos en el archivo '.c' que no tienen un elemento correspondiente en el archivo' .h'? Por ejemplo, las funciones estáticas pueden estar relacionadas con funciones globales y ubicarse antes o después de ellas. – jilles
Eso no está en la lista de requisitos. Si existe una herramienta que satisfaga los requisitos anteriores, estoy seguro de que podría manejar este caso. – Joe