Типы возврата нестандартных функций: Исправление ошибки разбора шины

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

bit foo(){
    //...
}

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

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

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

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

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

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

Прогресс:

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

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

А также

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

2 ответа

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

Есть что-то вроде:

#if defined RUNNING_SPLINT
#define bit unsigned char
#endif

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

Это было в FAQ:

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

Процитирую это:

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

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

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

Другие вопросы по тегам