- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用如下函数指针数组来避免代码中出现 switch
语句。
void E_func1(void);
void E_func2(void);
void E_func3(void);
void (*pfGetVal[3])() = {
E_func1,
E_func2,
E_func3
};
但是在运行 misra (pclint) 时,我收到以下错误:
conversion between a pointer to function and another type [MISRA 2012Rule 11.1, required]
我需要使用 typedef
吗?
我尝试了以下方法,但没有成功。
void (*pfGetVal[3])();
pfGetVal[0] = E_func1;
pfGetVal[1] = E_func2;
pfGetVal[2] = E_func3;
最佳答案
一个空的参数列表void func ()
确实not 意味着一个函数不接受参数,而是一个接受any 参数的函数。在 C 语言中,()
形式已过时,不应使用。
不要与 void func ()
和 void func (void)
相同的 C++ 混淆。
一些编译器允许从 ()
到 (void)
风格的函数指针的隐式转换,但严格来说它们是不同的类型,而且 MISRA-C 检查器比涉及类型安全的主流编译器。
通过将函数指针列表声明为 void (*pfGetVal[3])(void)
来解决此问题。或者更好:
typedef void GetVal (void);
GetVal* const pfGetVal[3] =
{
E_func1,
E_func2,
E_func3
};
关于函数指针和另一种类型之间的转换 [MISRA 2012 规则 11.1,必需] | pclint 9074,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65596207/
当我执行 pclint 时,我发现包含 header 在 c/c++ 文件中定义的顺序存在问题。 假设包含顺序是 , #include #include #include #include #
我使用如下函数指针数组来避免代码中出现 switch 语句。 void E_func1(void); void E_func2(void); void E_func3(void); void (*pf
我是一名优秀的程序员,十分优秀!