목차
2. goto" >2. goto
3. goto, break, continue의 차이점은 무엇인가요? " >3. goto, break, continue의 차이점은 무엇인가요?
1. 브레이크 테스트 기능" >1. 브레이크 테스트 기능
2. 계속 테스트 기능" >2. 계속 테스트 기능
四、支持与反对goto的理由是什么?" >四、支持与反对goto的理由是什么?
1、不提倡使用goto" >1、不提倡使用goto
2、使用goto的理由" >2、使用goto的理由
(1)跳出多层循环。" >(1)跳出多层循环。
(2)异常处理。" >(2)异常处理。
시스템 튜토리얼 리눅스 Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?

Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?

Feb 05, 2024 pm 01:25 PM
linux 리눅스 튜토리얼 리눅스 시스템 리눅스 명령 쉘 스크립트 overflow 임베디드리눅스 양젓가락 리눅스 시작하기 리눅스 학습

C언어의 goto 문에 대해서는 많은 논란이 있으며, 많은 책에서는 "주의해서 사용하거나 사용하지 않는 것이 좋습니다"라고 권장하고 있습니다. 그러나 리눅스의 아버지인 리누스(Linus)는 리눅스에서 goto 문을 널리 사용했고, 이는 우리가 이 기능을 합리적으로 사용하도록 영감을 주었습니다.

논쟁 때문에 goto 문 사용법을 배우는 것이 필요합니다. goto 문의 몇 가지 기본 구문과 예를 살펴보겠습니다.

1. goto

의 기본 구문

goto 문은 키워드 goto와 태그 이름의 두 부분으로 구성됩니다. 레이블의 명명 규칙은 변수의 명명 규칙과 동일합니다. 예:

으아악

이 문이 제대로 작동하려면 함수에 label이라는 또 다른 문도 포함되어야 합니다. 이 문은 레이블 이름으로 시작하고 뒤에 콜론이 옵니다. 예:

label:printf(“goto here.n”);

2. goto

의 예

모든 코드를 보려면 왼쪽과 오른쪽으로 스와이프하세요>>>>

으아악

실행 결과:

Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?

실행 결과에서 우리는 프로그램 실행 중에 goto 문을 만나면 레이블로 점프하여 실행을 계속할 수 있는 goto의 사용법을 분명히 알 수 있습니다.

한 가지 주목할 만한 점은 goto 문과 해당 점프 레이블이 동일한 함수 내에 있어야 한다는 것입니다.

3. goto, break, continue의 차이점은 무엇인가요?

jump문이기도 합니다. goto문과 break문, continue문의 차이점은 무엇인가요?

사실 break와 continue는 goto의 특별한 형태입니다. 중단 및 계속 사용의 장점은 이름이 이미 사용법을 나타낸다는 것입니다.

코드 예제를 통해 break 및 continue 사용법을 살펴보겠습니다.

1. 브레이크 테스트 기능

위의 테스트 프로그램을 사용하여 다음과 같은 break 문을 테스트하는 함수 void TestBreak(void);를 만듭니다.

모든 코드를 보려면 왼쪽이나 오른쪽으로 스와이프하세요>>>>

으아악

실행 결과:

Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?

실행 결과에서 우리는 break가 현재 루프를 종료할 수 있다는 것을 분명히 알 수 있습니다.

이 예에서 첫 번째 break 문은 현재 for 루프를 종료하고 두 번째 break 문은 현재 while 루프를 종료합니다. 중단이 루프를 종료할 수 있음을 알 수 있습니다.

따라서 break와 goto의 특성에 따라 여러 단계의 루프에서 벗어나고 싶다면 goto를 사용하는 것이 더 편리할 것입니다.

2. 계속 테스트 기능

마찬가지로, continue 문을 테스트하기 위해 다음과 같은 함수 void TestContinue(void);를 구축하세요:

모든 코드를 보려면 왼쪽이나 오른쪽으로 스와이프하세요>>>>

으아악

실행 결과:

Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?

continue가 이 루프를 종료하고(전체 루프가 아님) 다음 루프로 들어갈 수 있다는 실행 결과를 통해 분명히 알 수 있습니다(i는 루프 수를 나타냄).

四、支持与反对goto的理由是什么?

1、不提倡使用goto

不提倡使用goto的占比应该比较多,不提倡的原因主要是:很容易把逻辑弄乱且难以理解。

2、使用goto的理由

这一部分人认为goto可以用在以下两种情况比较方便:

(1)跳出多层循环。

这个例子就类似于我们上面的goto测试程序。

(2)异常处理。

一个函数的执行过程可能会产生很多种情况异常情况。下面有几种处理方式,以代码为例:

方法一:做出判断后,如果条件出错,直接return。

*左右滑动查看全部代码>>>*

int mystrlen(char *str)
{
   int count = 0;
   if (str == NULL)
   {
      return-1;
   }

   if (*str == 0)
   {
      return0;
   }

   while(*str != 0 )
   {
      count++;
      str++;
   }
   return count;
}
로그인 후 복사

方法二:先设置一个变量,对变量赋值,只有一个return。

*左右滑动查看全部代码>>>*

int mystrlen(char *str)
{
   int ret;
   if (str == NULL)
   {
      ret = -1;
   }
   elseif (*str == 0)
   {
      ret = 0;
   }
   else
   {
      ret = 0;
      while(*str != 0 )
      {
         ret++;
         str++;
      }
   }
   return ret;
}
로그인 후 복사

方法三:使用goto语句。

*左右滑动查看全部代码>>>*

int mystrlen(char *str)
{
   int ret;
   if (str == NULL)
   {
      ret = -1;
      goto _RET;
   }

   if (*str == 0)
   {
      ret = 0;
      goto _RET;
   }
       
   while(*str !=0 )
   {
      ret++;
      str++;
   }

_RET:
   return ret;
}
로그인 후 복사

其中,方法三就是很多人都提倡的方式。统一用goto err跳转是最方便且效率最高的,从反汇编语句条数可以看出指令用的最少,消耗的寄存器也最少,效率无疑是最高的。

并且,使用goto可以使程序变得更加可扩展。当程序需要在错误处理时释放资源时,统一到goto处理最方便。这也是为什么很多大型项目,开源项目,包括Linux,都会大量的出现goto来处理错误!

위 내용은 Linux 커널에서 goto가 널리 사용되는데 왜 많은 책에서 goto 사용을 옹호하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Web.xml을 열는 방법 Web.xml을 열는 방법 Apr 03, 2025 am 06:51 AM

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

C 언어로 멀티 스레딩을 구현하는 4 가지 방법 C 언어로 멀티 스레딩을 구현하는 4 가지 방법 Apr 03, 2025 pm 03:00 PM

언어의 멀티 스레딩은 프로그램 효율성을 크게 향상시킬 수 있습니다. C 언어에서 멀티 스레딩을 구현하는 4 가지 주요 방법이 있습니다. 독립 프로세스 생성 : 여러 독립적으로 실행되는 프로세스 생성, 각 프로세스에는 자체 메모리 공간이 있습니다. 의사-다일리트 레딩 : 동일한 메모리 공간을 공유하고 교대로 실행하는 프로세스에서 여러 실행 스트림을 만듭니다. 멀티 스레드 라이브러리 : PTHREADS와 같은 멀티 스레드 라이브러리를 사용하여 스레드를 만들고 관리하여 풍부한 스레드 작동 기능을 제공합니다. COROUTINE : 작업을 작은 하위 작업으로 나누고 차례로 실행하는 가벼운 다중 스레드 구현.

Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Linux 시스템에서 Python 통역사를 삭제할 수 있습니까? Apr 02, 2025 am 07:00 AM

Linux 시스템과 함께 제공되는 Python 통역사를 제거하는 문제와 관련하여 많은 Linux 배포판이 설치 될 때 Python 통역사를 사전 설치하고 패키지 관리자를 사용하지 않습니다 ...

가장 잘 사용되는 Linux는 무엇입니까? 가장 잘 사용되는 Linux는 무엇입니까? Apr 03, 2025 am 12:11 AM

Linux는 서버 관리, 임베디드 시스템 및 데스크탑 환경으로 사용되는 것이 가장 좋습니다. 1) 서버 관리에서 Linux는 웹 사이트, 데이터베이스 및 응용 프로그램을 호스팅하는 데 사용되어 안정성과 안정성을 제공합니다. 2) 임베디드 시스템에서 Linux는 유연성과 안정성으로 인해 스마트 홈 및 자동차 전자 시스템에서 널리 사용됩니다. 3) 데스크탑 환경에서 Linux는 풍부한 응용 프로그램과 효율적인 성능을 제공합니다.

데비안 하프 (Debian Hadoop)의 호환성은 어떻습니까? 데비안 하프 (Debian Hadoop)의 호환성은 어떻습니까? Apr 02, 2025 am 08:42 AM

Debianlinux는 안정성과 보안으로 유명하며 서버, 개발 및 데스크탑 환경에서 널리 사용됩니다. 현재 Debian 및 Hadoop과 직접 호환성에 대한 공식 지침이 부족하지만이 기사에서는 Debian 시스템에 Hadoop를 배포하는 방법을 안내합니다. 데비안 시스템 요구 사항 : Hadoop 구성을 시작하기 전에 Debian 시스템이 Hadoop의 최소 작동 요구 사항을 충족하는지 확인하십시오. 여기에는 필요한 JAVA 런타임 환경 (JRE) 및 Hadoop 패키지 설치가 포함됩니다. Hadoop 배포 단계 : 다운로드 및 unzip hadoop : 공식 Apachehadoop 웹 사이트에서 필요한 Hadoop 버전을 다운로드하여 해결하십시오.

GO를 사용하여 Oracle 데이터베이스에 연결할 때 Oracle 클라이언트를 설치해야합니까? GO를 사용하여 Oracle 데이터베이스에 연결할 때 Oracle 클라이언트를 설치해야합니까? Apr 02, 2025 pm 03:48 PM

GO를 사용하여 Oracle 데이터베이스에 연결할 때 Oracle 클라이언트를 설치해야합니까? GO에서 개발할 때 Oracle 데이터베이스에 연결하는 것이 일반적인 요구 사항입니다 ...

데비안 문자열은 여러 브라우저와 호환됩니다 데비안 문자열은 여러 브라우저와 호환됩니다 Apr 02, 2025 am 08:30 AM

"Debiantrings"는 표준 용어가 아니며 구체적인 의미는 여전히 불분명합니다. 이 기사는 브라우저 호환성에 직접 언급 할 수 없습니다. 그러나 "Debiantrings"가 Debian 시스템에서 실행되는 웹 응용 프로그램을 지칭하는 경우 브라우저 호환성은 응용 프로그램 자체의 기술 아키텍처에 따라 다릅니다. 대부분의 최신 웹 응용 프로그램은 크로스 브라우저 호환성에 전념합니다. 이는 웹 표준에 따라 웹 표준과 잘 호환 가능한 프론트 엔드 기술 (예 : HTML, CSS, JavaScript) 및 백엔드 기술 (PHP, Python, Node.js 등)을 사용하는 데 의존합니다. 응용 프로그램이 여러 브라우저와 호환되도록 개발자는 종종 브라우저 크로스 테스트를 수행하고 응답 성을 사용해야합니다.

See all articles