use*_*899 0 c pointers safety-critical
我们有两个简单的功能.
#include <stdio.h>
/* first approach */
int power1(int *ptr)
{
return *ptr * *ptr;
}
/* second approach */
int power2(int *ptr)
{
int tmp = *ptr;
return tmp*tmp;
}
int main()
{
int val = 5;
printf("%d\n", power1(&val));
printf("%d\n", power2(&val));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好?power1有点快,但我听说power2更安全.我不记得为什么?据我所知,有一种情况是power1(第一种方法)存在瓶颈.你能解释一下吗?安全关键系统是否使用第二种方法?
没有什么是好的.你要这个:
#include <stdio.h>
/* second approach */
int power(int operand)
{
return operand*operand;
}
int main(void)
{
int val = 5;
printf("%d\n", power(val));
}
Run Code Online (Sandbox Code Playgroud)
现在关于你的两种方法:
power2绝不比"更安全" power1.
BTW:
一个正确的声明方式main是int main(void),并且return 0;在结尾处main没有必要,如果main不包含一个return语句,则return 0;在结尾处有一个隐含的main.