Falta de férula en el código que incluye complejo.h
-
01-10-2019 - |
Pregunta
Estoy tratando de correr splint
en una fuente C que incluye complex.h
de la biblioteca C estándar para admitir la aritmética compleja.
Desafortunadamente, splint
falla con el siguiente error.
Férula 3.1.2 --- 03 de mayo de 2009
/usr/include/bits/cmathcalls.h:54:31: Error de análisis: Declaración de no función: _Complex: Extern Double. (Para obtener ayuda en los errores de análisis, vea la férula -help analizadores). *** No puede continuar.
Google para el problema resultó solo en este mensaje en la lista de correo dividido (que permanece sin respuesta).
¿Algunas ideas?
Actualizar
Aquí hay un ejemplo muy simple de una fuente fallida:
#include <complex.h>
int main() {
complex x = 2 + 8i;
x = x + 1;
}
Intentos de redefinir el sin apoyo _Complex
La palabra clave C99 conduce a un error con la parte imaginaria del número complejo (lo que no es sorprendente, supongo).
lsc@deepthought:~$ splint-D_Complex=double temp.c
Splint 3.1.2 --- 03 May 2009
temp.c:4:20: Parse Error. (For help on
parse errors, see splint -help
parseerrors.)
*** Cannot continue.
Solución 3
Finalmente resolví esto anulando temporalmente complex.h
con uno ficticio al llamar splint
.
[lsc@home]$ ls /opt/qa_tools/utils/splint_includes/
complex.h
[lsc@home]$ splint -I/opt/qa_tools/utils/splint_includes test.c
Splint 3.1.1 --- 15 Jun 2004
Finished checking --- no warnings
El muñeco complex.h
El archivo suprime las palabras clave relevantes y reemplaza las constantes/funciones con las ficticias. Estas palabras clave/constantes/funciones fueron obtenidas de las especificaciones
Una copia de este archivo está disponible aquí: https://gist.github.com/1316366
Otros consejos
No soy un usuario de férula, así que tome lo siguiente con un grano de sal ...
los _Complex
Se agregó palabras clave con C99, y las preguntas frecuentes de férula tienen esto por decir sobre C99 (http://www.splint.org/faq.html#Quest15):
Sin embargo, la férula aún no admite todas las extensiones C99, por lo que hay algunos programas C legítimos que deberán modificarse.
Supongo que eso _Complex
está cubierto por esa advertencia.
Es posible que pueda trabajar con la aparente falta de apoyo de FIRS _Complex
utilizando una técnica descrita en las preguntas frecuentes (http://www.splint.org/faq.html#Quest14), pero me sorprendería si esto te llevara muy lejos con ayudar a la férula a tratar con el código C99 usando _Complex
:
Si solo desea ignorar una palabra clave, puede agregar
-Dnonstandardkeyword=
Para que el preprocesador elimine la palabra clave, dondenonstandardkeyword
es el nombre de la palabra clave.
Estaba luchando por obtener férula para ignorar los encabezados y no encontrar respuestas adecuadas en ningún lugar en línea. Finalmente utilicé la ayuda incorporada de Splint y descubrí esto:
#ifndef S_SPLINT_S #endif
Si pone este par en el código que desea que la férula ignore, ¡lo ignorará! Ninguna de las otras cosas funciona para los archivos de encabezado del sistema, al menos que he encontrado.