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.
¿Fue útil?

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, donde nonstandardkeyword 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top