asm
- это расширение компилятора , ключевое слово , а не функция. Будучи специфичным для компилятора, он не распознается автоматически инструментом статического анализа, а синтаксис встроенной сборки вашего компилятора является «функциональным», поэтому он применяет правило прототипирования функции.
Вам необходимо правильно настроить PC-Lint с помощью файла конфигурации или параметров командной строки, которые описывают поведение, определяемое реализацией вашего компилятора. Это может включать в себя очень много вариантов, но в этом случае вы должны использовать:
-dasm()=
, что заставит анализатор игнорировать встроенный код сборки с функциональным синтаксисом asm(...)
В качестве альтернативы вы можете игнорировать синтаксис встроенного ассемблера во время статического анализа, условно определяя макрос, который скрывает все такие директивы:
#if defined _lint
#define asm( asmstr )
#endif
Однако это скрыло бы другие отклонения от средства проверки, такие как правила инкапсуляции и изоляции встроенной сборки. По этой причине вам не следует использовать макрос или встроенную сборку, смешанную со строками кода на C, а скорее определять функцию-обертку:
void reset(void)
{
asm("reset");
}
и поместите определенную выше функцию reset()
в отдельную единицу перевода и просто пропустите этот исходный код из анализа - как если бы это был библиотечный код.