在我正在测试的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__
是否会影响我写变量的外部声明的方式?
这里有两个问题。
首先,Misra-C要求代码应为标准C,因此您必须与使用标准c。
的规则建立偏差第二,Misra-C不喜欢您在不是static
的文件范围内声明变量。全局变量不仅被Misra-C皱眉了,因此请问自己是否确实必须在整个地方揭露此变量,或者您是否可以通过setter/getter函数访问它。
话虽如此,我相信__attribute__
的工作原理与其他类型的预选赛一样。您可以在声明等的开头或结束时编写它。因此,写作应该没有问题:
extern const volatile uint8_t attributeVariable __attribute__ ((section(".abc.dfe")));