__attribute__ 的兼容声明 ((section(".abc.dfe"))) const volatile uint8 attributeVariable = 0; - 符合 MISRA 标准

Compatible declaration for __attribute__ ((section(".abc.dfe"))) const volatile uint8 attributeVariable = 0; - MISRA compliant

以下 const 在我正在测试 MISRA 准则违规的项目文件中声明为

__attribute__ ((section(".abc.dfe"))) const volatile uint8 attributeVariable = 0;

MISRA 测试产生以下信息

A compatible declaration shall be visible when an object or function with external linkage is defined. 
Global definition of 'attributeVariable ' variable has no previous declaration.

我已经修复了其他未使用 __attribute__ 关键字的全局定义,方法是将其声明为

extern const volatile uint8 attributeVariable;

在 header 文件中。我不确定是否可以在使用 __attribute__ 关键字时以相同的方式在 header 中编写声明。 __attribute__ 会影响我编写变量的外部声明的方式吗?

这里有两个问题。

首先MISRA-C要求代码必须是标准C,所以你必须偏离使用标准C的规则。

其次,MISRA-C 不喜欢您在文件范围内声明不是 static 的变量。不仅 MISRA-C 不赞成全局变量,所以问问自己是否真的必须在所有地方公开这个变量,或者是否可以通过 setter/getter 函数访问它。

话虽如此,我相信__attribute__ 的工作方式与其他类型限定符非常相似。你可以把它写在声明的开头或结尾等。这样写应该没有问题例如:

extern const volatile uint8_t attributeVariable __attribute__ ((section(".abc.dfe")));