我想防止传递给函数的整数数组被改变:使用const
防止受到影响(=或++:编译错误=确定)
不要阻止扫描! (scanf:仅来自编译器的警告......如何获得编译错误......
有办法吗?
编辑1:可能是我不够清楚...我想证明,当添加const时,不可能修改数组的内容......但似乎它不是不可能...
编辑2:从你的答案中得出结论:使用C,不可能防止传递给函数的整数数组在该函数内被修改(-Wall编译器选项产生错误而不是警告)
我已经阅读过关于const的位置的事情,但它对我没有帮助。
感谢您的帮助。
代码示例:
#include <stdio.h>
#define mySIZE 4
void testReadOnly1(const int t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
/*t[i] = 0;*/ /* ERROR : assignment to read-only location */
}
}
void testReadOnly2(const int t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
printf("%d ",i);
scanf("%d",&t[i]); /* warning : writing into constant object */
}
}
void testReadOnly3(const int const t[])
{
unsigned int i = 0;
for (i=0; i<mySIZE; i++)
{
printf("%d ",i);
scanf("%d",&t[i]); /* warning : writing into constant object */
}
}
void show(const int t[])
{
unsigned int i = 0;
printf("\n");
for (i=0; i<mySIZE; i++)
{
printf("%d ",t[i]);
}
printf("\n");
}
int main ( void )
{
int t[mySIZE];
/*testReadOnly1(t);
show(t);*/
testReadOnly2(t);
show(t);
testReadOnly3(t);
show(t);
return 0;
}
答案 0 :(得分:1)
scanf
是一个可变函数int scanf(const char *restrict format, ...);
,并且缺少有关您传递给它的其他参数的任何类型信息。这些天的C编译器确实有类似printf / scanf行为的知识,并且可以尝试执行一些类型检查,比如将const对象传递给scanf时得到的警告。我没有看到一种方法可以将特定的warning : writing into constant object
GCC警告变成错误而不会使-Werror
出现任何错误警告,即使修改这样的const对象是技术上未定义的行为。 / p>