这篇博客旨在强调软件测试开发过程中Warning的重要性
软件开发过程中,软件开发人员常常重视error而忽视warning,然而warning却能为我们提供更为重要的关于软件日后稳定性健壮性的信息
下面我就以一个小例子来和大家分享我对warning的理解
//test.c
#include<stdio.h>
int main(void)
{
char buff[10];
memset(buff,0,sizeof(buff));
gets(buff);
printf("
The buffer entered is [%s]
",buff);
return 0;
}
这是一点简单的c语言程序,linux下运行后功能是让用户输入一串字符床并输出显示用户的输入信息。但编译时会出现两个warning
warning如下:
- 第一个warning
incompatible implicit declaration of built-int function 'memset’是说函数memset没有明确定义,那么就隐试定义。编译时库里有这个函数就不会出错。然而这样做是危险的,例如库里的函数不是的想要的函数,他实现的功能与你想要的不一致那么出错就很难发现也很难理解,所以函数都应该被明确定义。
对于此例添加#include<string>.h 便可消除warning
- 第二个warning
'gets' is deprecated gets函数已经被弃用原因是
如果你有这样的code:
char s[10];
gets( s );
当程序运行的时候你输入了超过10个字符,你就会是buffer溢出,造成undefined behaviour。gets() 函数不能防止你输入数量越界,因此gets()函数给弃用。用来代替的可以用fgets()函数, 这个函数可以限制你的字符输入数量,防止buffer溢出:
char s[10];
fgets( s, 10, stdin );
//test.c
修改后的code:
#include<stdio.h>
#include<string.h>
int main(void)
{
char buff[10];
memset(buff,0,sizeof(buff));
fgets(buff,10,stdin);
printf("
The buffer entered is [%s]
",buff);
return 0;
}
编译正常,没有warning。
谨以此片博客为大家提示warning的重要性,以及在保证软件稳定性健壮性是的重要性,希望对大家以后的编程中有所帮助。