标准c/c++建议废弃使用goto,其对于goto的支持仅是对于旧代码的兼容
然而我们在微软的新代码中仍然看到goto的存在,这是为什么?
其实若是把goto与if配合,当做汇编中的LOOP使用,的确是应该废弃的
例如:
int n=0;
printf("input a string/n");
loop: if(getchar()!='/n')
{
n++;
goto loop;
}
printf("%d",n);
我们可以看出把goto当做LOOP使用有如下缺点:
a.goto作为循环不明显
b.像loop这样的label标志是全局量,缺点不说也知道
c.多层嵌套,不易读写
但是把goto当做汇编中的jmp向下跳转,是有很多优势的
例如:
char *a=NULL;
char *b=NULL;
char *c=NULL;
a=(char*)malloc(1);
if(!a)
goto FunName_End
b=(char*)malloc(5) ;
if(!b)
goto FunName_End
c=(char*)malloc(7) ;
if(!c)
goto FunName_End:
return true;
我们可以看出goto作向下跳转的jmp有如下优势
a.对于不可写为循环但也相同出口的语块,goto使代码简洁
b.代码易读
c.跳转落点精确
d.可使函数或语块有唯一出口