工作中需要临时抑制 警告 Pa084,源代码如下:
sy_errno_t sy_memset_s(void *dest, sy_rsize_t dmax, int value, sy_rsize_t n)
{
sy_errno_t err;if (dest == NULL)
{
return SY_ESNULLP;
}if (dmax > SY_RSIZE_MAX_MEM) // 这里报警告 Pa084
{
return SY_ESLEMAX;
}if (n == 0) { /* since C11 n=0 is allowed */
return SY_EOK;
}if (value > 255) {
return SY_ESLEMAX;
}err = SY_EOK;
if (n > dmax) {
err = n > SY_RSIZE_MAX_MEM ? SY_ESLEMAX : SY_ESNOSPC; // 这里报警告 Pa084
n = dmax;
}sy_mem_prim_set(dest, n, (uint8_t)value);
return err;
}
查看IAR帮助文档找到如下两处说明:
1. diag_suppress
2. diag_warning
结合两者描述部分的说明可知,diag_suppress用于将指定诊断信息抑制(设置)为warning level以下,diag_warning用于将指定诊断信息改变(提升)为warning level,故代码修改如下:
sy_errno_t sy_memset_s(void *dest, sy_rsize_t dmax, int value, sy_rsize_t n)
{
sy_errno_t err;if (dest == NULL)
{
return SY_ESNULLP;
}#pragma diag_suppress=Pa084
if (dmax > SY_RSIZE_MAX_MEM) // 这里报警告
{
return SY_ESLEMAX;
}
#pragma diag_warning=Pa084if (n == 0) { /* since C11 n=0 is allowed */
return SY_EOK;
}if (value > 255) {
return SY_ESLEMAX;
}err = SY_EOK;
#pragma diag_suppress=Pa084
if (n > dmax) {
err = n > SY_RSIZE_MAX_MEM ? SY_ESLEMAX : SY_ESNOSPC; // 这里报警告
n = dmax;
}
#pragma diag_warning=Pa084sy_mem_prim_set(dest, n, (uint8_t)value);
return err;
}
在报警告代码段前后增加 #pragma diag_suppress=Pa084 和 #pragma diag_warning=Pa084,警告抑制,且不会影响其他地方的警告。