/* goto语句 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* goto语句也称为无条件转移语句,其通常格式以下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的做用,与goto 语句配合使用。 */ /* "可是,在结构化程序设计中通常不主张使用goto语句, 以避免形成程序流程的混乱,使理解和调试程序都产生困难。" 全部goto说明都有相似提示,可是我的感受goto仍是颇有用的 */ int handle(int num) { return num; } //goto基本用法 void test1() { int errCode = 0; //业务1 errCode = handle(1); if (errCode) { goto err; } //业务2 errCode = handle(1); if (errCode) { goto err; } printf("-----ok----\n"); return; err: //资源释放处理 printf("program is error .\n"); } /* goto做用域说明 标签自己没有做用域的,只是一个标志点。 可是goto自己有限制,只能是当前函数。因此,从这个角度来讲,标签的做用域也能够说是当前函数。 */ void test2() { int errCode = 0; errCode = handle(1); if (errCode) { //goto err; error C2094: 标签“err”未定义 } } int main() { test2(); printf("-----ok------\n"); getchar(); return 0; }
/* do{ ... }while(false)妙用 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* goto在函数有多个返回分支,部分或所有返回分支返回前须要作一些额外的工做(如释放内存等)场景颇有做用 可是goto是跳转,在c++编程中,若是变量定义在goto语句后面就会报错(变量未定义) do{ ... }while(false)就是一种取代goto的方法 */ int handle(int num) { return num; } //do while 使用 int test1() { int errCode = 0; do { //业务1 errCode = handle(1); if (errCode) { break; } //业务2 errCode = handle(1); if (errCode) { break; } //作须要执行的操做 } while (0); //资源释放处理 return errCode; } int main() { test1(); printf("-----ok------\n"); getchar(); return 0; }