Я использую QAC, и я получаю следующее сообщение для соответствующей строки исходного кода. Как я могу отдать его, чтобы QAC «понял» его?Как я могу выразить выражение, чтобы избавиться от предупреждения QAC?
Компилятор, используемый gcc - он не предупреждает об этой проблеме, так как он установлен на «iso c99».
#define DIAGMGR_SIGNED_2_BYTES_178 ((s16)178)
sK = (s16)(sE1/DIAGMGR_SIGNED_2_BYTES_178);
^
Результат знакового деления или остаток операций может быть определена реализация
.
Разделение («/») или остаточный («%») операция выполняется в подписанного целого типа, и результат может быть от реализации. Сообщения 3103 генерируются для целочисленного деления или остатка операции в знаковом типе, где:
- Один или оба операнда не являются постоянным и подписанным целочисленным типа, или
- Оба операнда являются целыми числами константных выражений, один из отрицательного значения и один из положительного значения
целочисленное деление или операцию остатка, в котором один операнд является положительным, а другой является отрицательным, может быть выполнено одним из двух способов :
- Отдел будет круглым к нулю, и любой ненулевой остаток будет отрицательное значение
- Разделение округлит от нуля, и любой ненулевой остаток будет положительное значение В ISO: Стандарт C99 первый подход - . В стандарте ISO: C90 может использоваться любой подход - результат определяется реализацией. Например:
/PRQA S 3120,3198,3408,3447 ++/
extern int r; extern int si; extern void foo(void) { r = -7/4; /* Message 3103 *//* Result is -1 in C99 but may be -2 in C90 */ r = -7 % 4; /* Message 3103 *//* Result is -3 in C99 but may be 1 in C90 */ si = si/r; /* Message 3103 */ }
Другой грязный трюк, который я бы не рекомендовал, может заключаться в том, чтобы инкапсулировать все подразделения внутри функций C99. Например, используя составной литерал: 'int result = (int [1]) {x/y} [0];'. Если инструмент дает предупреждение о небезопасном разделении на этой линии, было бы довольно сложно для поставщика инструмента объяснить объяснение, почему :) – Lundin