Splint не удается в код, который включает в себя COMPOREC.H

StackOverflow https://stackoverflow.com/questions/3144057

Вопрос

Я пытаюсь бежать splint на источник C, который включает в себя complex.h Из стандартной библиотеки C для поддержки сложной арифметики.

К сожалению, splint Не удается со следующей ошибкой.

Sprint 3.1.2 --- 03 май 2009 г.

/usr/include/bits/cmathcalls.h:54:31: Ошибка разбора: нефункциональная декларация: _Complex: Extern Double. (Для помощи на ошибках разбора см. В Splint -Help ParseErrors.) *** Не может продолжаться.

Гуглами за эту проблему только привело это сообщение в списке рассылки разделения (который остается без ответа).

Есть идеи?

Обновлять

Вот очень простой пример текущего источника:

#include <complex.h>

int main() {
  complex x = 2 + 8i;
  x = x + 1;
}

Попытки переопределить неподдерживаемый _Complex Ключевое слово C99 приводит к ошибке с воображаемым частью комплексного числа (которая не удивительна, я полагаю).

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.
Это было полезно?

Решение 3

В конце концов я решил это, временно переопределенным complex.h с манекеном при звонке 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

Манекен complex.h Файл подавляет соответствующие ключевые слова и заменяет константы / функции с фиктивными. Эти ключевые слова / константы / функции были почеррены из спецификации

Копия этого файла доступна здесь: https://gist.github.com/1316366.

Другие советы

Я не пользователь Splint, поэтому сделайте следующее с зерном соли ...

То _Complex Ключевое слово было добавлено с C99, и FAQ Splint, который можно сказать о C99 (http://www.splint.org/faq.html#quest15.):

Однако Splint еще не поддерживает все расширения C99, поэтому есть некоторые законные программы C, которые необходимо будет изменено.

Я думаю, что это _Complex покрывается этим предостережением.

Вы можете работать вокруг очевидной недостаточной поддержки Splint _Complex Использование методики, описанной в FAQ (http://www.splint.org/faq.html#quest14.) _Complex:

Если вы просто хотите игнорировать ключевое слово, вы можете добавить -Dnonstandardkeyword= Чтобы сделать препроцессор устранить ключевое слово, где nonstandardkeyword это имя ключевого слова.

Я изо всех сил пытался получить шин, чтобы игнорировать заголовки и не найти подходящие ответы в любом месте в сети. Я наконец использовал встроенную справку Splint и обнаружил это:

#ifndef s_splint_s #endif.

Если вы поместите эту пару вокруг кода, вы хотите, чтобы разбиться игнорировать, он будет игнорировать его! Ни одно из других вещей не работает для файлов заголовка системы, по крайней мере, я нашел.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top