C/C++中的goto语句
时间:2020-02-23 14:29:58 来源:igfitidea点击:
像C和C++这样的编程语言提供了无条件使用goto语句跳过语句的规定。
尽管goto语句的用法几乎已绝迹,但它是程序员的便利工具。
在本文中,我们将介绍goto语句的语法和用法。
C/C++中goto语句的语法
基本语法涉及两个语句-跳转的开始和目的地。
//Jump to label = abcd //Initiation goto abcd; ... ... ... //label = abcd //Destination abcd:
在上面的代码片段中,标签被命名为" abcd"。
因此,如果我们需要跳转到标签,我们将编写" goto abcd"。
类似地,我们可以使用goto语句跳转到代码的前一行:
//label = abcd //Destination abcd: ... ... ... //Jump to label = abcd //Initiation goto abcd;
除了语法外,启动和目的地的goto语句必须存在于同一函数中。
简而言之,我们不能使用goto命令在函数之间转换。
goto语句的应用
经典的goto语句有许多用途。
让我们逐一探讨它们。
1. goto作为跳转跳板
goto语句的基本优点之一是无需任何努力即可绕过某些代码行的能力。
#include<iostream>
using namespace std;
int main(){
//Name and Age
string name = "luffy";
int age = 17;
getAadharCard();
//If less than 18 years, skip other identification
if(age < 18)
//Goto jump initiation
goto end;
getPanCard();
getVoterId();
getDrivingLicense();
//Goto Jump Destination
end:
return 1;
}
" goto"语句乍一看似乎是个小孩子的游戏,但是它很容易用一小段代码带来复杂性。
2. goto语句作为循环
在发明for和while循环之前,goto语句是所有程序员的首选语句。
但是,使用" goto"会使程序变得复杂,因此不鼓励使用它。
#include<iostream>
using namespace std;
int main(){
//Iterator
int i = 0;
//Label name = loop
//Label destination
loop:
cout<<i<<endl;
//Loop updation
i++;
//Condition for the loop
if(i < 5)
//Label initiation
goto loop;
return 1;
}
输出:
0 1 2 3 4
主函数中代码的逻辑流程如下:
- 迭代器的初始化–" int i = 0;"
- 打印迭代器–
cout << i << endl; - 迭代器的增量–
i ++; - 条件语句检查–" if(i <5)"
- 跳转到label = loop的Goto语句– goto loop;
- 标签目标–循环:
- 打印迭代器–
cout << i << endl; - 然后继续……。
简而言之,代码的执行将正常进行,直到遇到" goto"语句。
但是,当遇到goto时,代码流跳到goto提到的标签。
3. Goto语句作为中断
单个break语句可以结束单个循环。
因此,为了突破多个循环,我们需要条件和多次中断。
通过使用goto语句可以简化这种完成多个循环的代码密集型方法。
#include<iostream>
using namespace std;
int main(){
//2D Array
int arr[][3] = {{0, 0, 1}, {0, 1, 0}, {1, 0, 1}};
//Number of rows
int r = sizeof(arr)/sizeof(arr[0]);
//Outer loop for rows
for(int i=0; i<r; i++){
//Inner loop for values
for(int j=0; j<3; j++){
//Condition if 1 is encountered
if(arr[i][j] == 1)
//Goto Jump Initiation
goto out;
}
}
//Goto Jump destination
out:
return 1;
}
程序员中断多个循环变得非常方便。
尽管在代码审查期间,goto语句可能会使审查者措手不及。

