Я работаю с Polyspace Code Prover и Bug Finder, чтобы выполнить статический анализ моего приложения Linux, написанного на C.
Мы получаем несколько предупреждений об использовании флагов, как определено на страницах «man» упомянутых вызовов. В справочных страницах функций, таких как open (), write () или syslog (), мы можем видеть, что у них есть параметр, который мы можем передать как ИЛИ нескольких флагов, определенных интерфейсом, как в следующем примере:
fd_value = shm_open(shm_key, O_CREAT | O_RDWR | O_EXCL , S_IRWXU);
Polyspace жалуется, что в приведенном выше примере флаги O_CREAT
, O_RDWR
и O_EXCL
относятся к разным основным типам (некоторые без знака, некоторые со знаком), и поэтому такая операция ИЛИ не рекомендуется. Это верно в соответствии с рекомендациями MISRA 10.1, но если это то, как система определяет свой API и его значения, что я могу с этим поделать? Мне кажется, что приводить значения, чтобы сделать инструмент счастливым, рискованно.
Есть ли другой способ обойти проблему, кроме оправдания этих нарушений?
Спасибо, с наилучшими пожеланиями!