Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在函数参数中计算C表达式是否违反MISRA C准则?_C_Compiler Optimization_Misra - Fatal编程技术网

在函数参数中计算C表达式是否违反MISRA C准则?

在函数参数中计算C表达式是否违反MISRA C准则?,c,compiler-optimization,misra,C,Compiler Optimization,Misra,现在考虑一下在安全关键嵌入式软件中执行的以下代码,gcc\u optimization\u level的大小为Level2。比如一个函数,voidfoo(float v)作为foo(a/b)调用其中说a和b也是float。调用函数foo时计算C表达式a/b是否违反MISRA C准则 附言:这个问题是从上周弱表述的前一个版本修订而来的。现在,这个问题确保它是一个单一的问题,而不是一个家庭作业问题,希望不会引发意见。MISRA C中没有任何东西可以阻止调用foo(a/b),只要类型正确 在MISRA

现在考虑一下在安全关键嵌入式软件中执行的以下代码,
gcc\u optimization\u level
的大小为Level2。比如一个函数,
voidfoo(float v)作为
foo(a/b)调用其中说
a
b
也是
float
。调用函数
foo
时计算C表达式
a/b
是否违反MISRA C准则


附言:这个问题是从上周弱表述的前一个版本修订而来的。现在,这个问题确保它是一个单一的问题,而不是一个家庭作业问题,希望不会引发意见。

MISRA C中没有任何东西可以阻止调用
foo(a/b)
,只要类型正确

在MISRA C中,
基本类型
的概念是试图在C语言中引入更强的类型-这在MISRA C:2012的附录D中有详细说明,规则10.x指南是强制执行的

同样,在MISRA C中,除了第4.2节“理解编译器”和第5.3.1节“编译器配置”讨论必要的知识(未详细说明任何指南)之外,没有任何内容讨论优化级别。这些部分现在构成了本手册的一部分


免责声明:请参阅配置文件。

为什么不编写此代码并通过MISRA检查器运行?MISRA是一个限制性很强的标准,我也不会感到惊讶,即使这些无辜的东西可能会被标记。无论如何,看看MISRA-C指南,我没有看到任何东西会限制函数调用中的表达式计算。“编译器优化”(标记,并提到一些特定的编译器)与MISRA有什么关系?我想说的是,代码违反了建议规则,即您应该使用
float32\t
而不是
float
。但是Misra2008PDF可以在谷歌上找到,你读过了吗?您是否尝试搜索可能违反的规则?你能展示真正完整的代码而不是片段吗?您担心这些代码可能会违反哪些具体规则?它与优化有什么关系?在除法
a/b
中是否有检查溢出或被零除的要求?也许在函数调用表达式中这样做会使它更难遵守?亲爱的@EugeneSh。是否有任何MISRA检查器,我可以插入此代码并检查它?我曾经有一个IDE可以进行这些检查,但我不再拥有该IDE的许可证:(我的看法是,如果函数被声明为
void foo(double);
a/b
应该是MISRA所称的“复合表达式”,那么这将是一个MISRA-C冲突)还有一条规则10.6反对将其分配给同一基本类型的更广泛变量。这假设函数调用被视为MISRA的赋值,因为这是C标准处理它们的方式。是的,但是OP有
void foo(float)
那么我们没事了?谢谢@Andrew,我对你的回答很满意。感谢其他人的宝贵意见,我对你的评论感到充实!谢谢!