Нестандартные типы возвращаемых функций: исправление ошибки синтаксического анализа Splint

Я использую встроенный компилятор XC8 C (для микропроцессоров PIC). Допускается следующее:

bit foo(){
    //...
}

но, будучи нестандартным C, статический анализатор Splint выдает следующую ошибку:

Ошибка синтаксического анализа: объявление не функции: бит: "-----------------------------------------------------" внутр.

А файл/строка ошибки — это прототип функции в соответствующем файле .h.

Как я могу это исправить, чтобы Splint мог анализировать остальные файлы? Я думаю, что может быть два пути:

  1. Кажется, я помню, что видел флаг, который можно передать в Splint через CLI, который говорит ему заменить заданный нестандартный тип стандартным типом (например, бит на беззнаковый символ), но сейчас я его вообще не могу найти!

  2. Кроме того, возможно, есть альтернативный способ написания кода c, который удовлетворяет требованиям ANSI-C, но при этом позволяет XC8 интерпретировать возвращаемый тип как bit?

Ход выполнения:

Я нашел следующее на форуме, но я не могу найти информацию о том, как использовать флаг -D в вручную:

Чтобы игнорировать ключевое слово, добавьте -Dnonstandardkeyword=, чтобы препроцессор удалил его.

А также

используйте -Dspecialtype=int, чтобы сделать анализ пользовательского типа как int.


person CL22    schedule 24.02.2014    source источник


Ответы (2)


Если у программы анализа нет возможности выполнить замену, вы, конечно, можете сделать это с помощью препроцессора.

Имейте что-то вроде:

#if defined RUNNING_SPLINT
#define bit unsigned char
#endif

в т.ч. заголовок, который, как вы убедитесь, включен везде, enter code hereи убедитесь, что вы определили символ препроцессора RUNNING_SPLINT, когда Splint увидит код. Для этого у него есть флаг -D.

person unwind    schedule 24.02.2014

Было в FAQ:

http://www.splint.org/faq.html

Цитирую:

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

Вы можете часто использовать -D для решения этой проблемы.

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

person CL22    schedule 24.02.2014