__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")));
以下 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")));