ошибка шины в коде, который включает complex.h - PullRequest
1 голос
/ 29 июня 2010

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

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

Splint 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 ]

3 голосов
/ 30 июня 2010

Я не являюсь пользователем шины, поэтому возьмем следующее с небольшим количеством соли ...

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

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

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

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

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

1 голос
/ 17 сентября 2013

Я изо всех сил пытался заставить сплинт игнорировать заголовки и не находил подходящих ответов нигде в Интернете.Наконец, я воспользовался встроенной справкой splint и обнаружил следующее:

#ifndef S_SPLINT_S

#endif

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

0 голосов
/ 26 октября 2011

Я в конце концов решил эту проблему, временно заменив 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

...