写代码的规范真的很重要,今天拿到一段别人写的代码,出了bug,问题就在规范上。
void findFiles(char* findFile)
{
// 文件信息
struct _finddata_t fileInfo;
long Handle;
if( Handle=_findfirst(findFile, &fileInfo) != -1L) //@
{
while(_findnext(Handle,&fileInfo) == 0)
{
//此段总是执行不到
printf("%s", fileInfo.name);
_findclose(Handle);
}
}
}
这段代码是查找一个文件夹底下的所有文件名显示名称的,但是标注的地总是执行不到,好使findFile变量的值为"C://*"并且C盘底下不为空,也执行不到。
还好,从逻辑上推只可能是_findnext函数一直返回0,但是这是什么原因呢?
仔细分析,很可能是传入的参数有问题,传入的Handle可能是无效的。
回到“//@"标注的语句分析:"!="的优先级高于前面的"="的优先级,于是Handle并没有获得_findfirst(findFile, &fileInfo)的返回值,而是获得了"!="这个运算的返回值,显然是一个无效的Handle
这样的问题其实按合理的风格写代码就不会发生,上面的:
if( Handle = _findfirst(findFile, &fileInfo) != -1L) //@
拆成两句:
Handle = _findfirst(findFile, &fileInfo);
if(Handle != -1L)
....
这样就写对了,运行正确,可读性也好了很多。
总结:不要在if、while等判断语句中写一些赋值运算,这样的地方常出bug,而且还不好查。可读性也大大降低。
代码不规范的一个实例——判断语句中不要赋值!
最新推荐文章于 2024-06-06 21:46:15 发布