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 &lt;&lt; i &lt;&lt; endl;
  • 迭代器的增量–i ++;
  • 条件语句检查–" if(i <5)"
  • 跳转到label = loop的Goto语句– goto loop;
  • 标签目标–循环:
  • 打印迭代器–cout &lt;&lt; i &lt;&lt; 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语句可能会使审查者措手不及。