我正在测试是否有违反MISRA准则的项目文件中声明了以下const
__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;
头文件中的。我不确定是否可以使用__attribute__
关键字时以相同的方式将声明写在标头中。 __attribute__
是否影响我应该编写变量的外部声明的方式?
答案 0 :(得分:1)
这里有两个问题。
首先,MISRA-C要求代码应为标准C,因此您必须与使用标准C的规则产生偏差。
第二,MISRA-C不喜欢您在文件范围内声明不是static
的变量。全局变量不仅不被MISRA-C所困扰,所以问问自己,是否真的必须在整个地方公开此变量,或者是否可以通过setter / getter函数访问它。
话虽如此,我相信__attribute__
的工作原理与其他类型限定符非常相似。您可以在声明的开头或结尾等处编写它。因此,例如编写应该没有问题:
extern const volatile uint8_t attributeVariable __attribute__ ((section(".abc.dfe")));