Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
如何解决这一问题+;合规警告 int-foo(常量数组[]){ int x; 对于(i=0;i已经声明数组const,我在C++编程),_C++ - Fatal编程技术网

如何解决这一问题+;合规警告 int-foo(常量数组[]){ int x; 对于(i=0;i已经声明数组const,我在C++编程),

如何解决这一问题+;合规警告 int-foo(常量数组[]){ int x; 对于(i=0;i已经声明数组const,我在C++编程),,c++,C++,首先要注意的是 int fo(const uint 8xt数组[])< /> >等效于int fo(const uint 8xt*数组),即函数采用指向常量的指针,而不是数组。指针本身不是常量,指针对象是。签名应为: int foo(const uint8_t array[]) { int x; for(i=0;i<5;i++){ x= array[i]; } return 0; } 作为记录,我不认为此警告特别有用。参数是按值获取的,调用方不关心函数如何处理它。此外,在比较函

首先要注意的是<代码> int fo(const uint 8xt数组[])< /> >等效于int <代码> fo(const uint 8xt*数组),即函数采用指向
常量的指针,而不是数组。指针本身不是
常量,指针对象是。签名应为:

int foo(const uint8_t array[]) {
int x;
  for(i=0;i<5;i++){
  x= array[i];
}
return 0;
}
作为记录,我不认为此警告特别有用。参数是按值获取的,调用方不关心函数如何处理它。此外,在比较函数签名时,忽略了参数上的顶级常量限定符,这可能会导致一些混淆

例如,
void foo(int)
void foo(const int)
是相同的签名

编辑:

因此,根据,MISRA不知道不能按值传递数组,并抱怨数组索引与指针算法的工作方式不同。不寒而栗……问题是不能使用数组语法添加顶级
const
,这使得对这两个警告的修复相互排斥

试着这样做,然后:

int foo(const uint8_t* const array)  

记住,不管语法如何,函数实际上接受一个指针,并且与

typedef const uint8_t Array[];
int foo(const Array arr);
因此
array
指向一个常量字节数组;但它本身并不是常量。警告指出,由于函数不修改指针,它可以(至少根据此规则,应该)是常量:

int foo(const uint8_t * array)

还有另一种方法,它似乎位于


要安全地向前移动指针,只需使用
std::advance(array,1)
,然后只需取消引用
(*array)即可访问该值
,位置,这似乎摆脱了问题中的MISRA警告。

正是如此……我在提出这个问题之前尝试了同样的方法,但之后它又开始给出不同的警告,如“规则5-0-15,使用了数组索引以外的指针算术”==>对于x=array[i];@suhel哇,这……太可怕了:)更新了答案。@suhel如果您能反馈
typedef
是否有效,我将不胜感激。
int foo(const uint8_t * const array)