目次
四、支持与反对goto的理由是什么?" >四、支持与反对goto的理由是什么?
1、不提倡使用goto" >1、不提倡使用goto
2、使用goto的理由" >2、使用goto的理由
(1)跳出多层循环。" >(1)跳出多层循环。
(2)异常处理。" >(2)异常处理。
ホームページ システムチュートリアル Linux goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?

goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?

Feb 05, 2024 pm 01:25 PM
linux Linuxチュートリアル Linuxシステム Linuxコマンド シェルスクリプト overflow 埋め込みLinux 良い約束 Linux を始める Linux学習

C 言語の goto ステートメントについては多くの議論があり、多くの書籍では「使用には注意するか、使用を避けること」が推奨されています。ただし、Linux の父である Linus の実践では、Linux で goto ステートメントが広く使用されており、この機能も私たちにこの機能を合理的に使用するきっかけを与えてくれました。

論争があるため、goto ステートメントの使用方法を学ぶ必要があります。 goto ステートメントの基本的な構文と例を見てみましょう:

1. gotoの基本構文

goto ステートメントは、キーワード goto とラベル名の 2 つの部分で構成されます。ラベルの命名規則は変数の命名規則と同じです。例: ### リーリー

このステートメントが正しく動作するには、関数に、次のように、ラベル名で始まり、その後にコロンが続く、label というラベルが付いた別のステートメントも含める必要があります。

label:printf(“ここに移動します。\n”);

2. goto

の例

左右にスワイプしてすべてのコードを表示>>>

リーリー 操作結果:

実行結果から、複数のループからジャンプできる goto の使用法が明らかにわかります。プログラムの実行中に goto ステートメントに遭遇すると、そのラベルにジャンプして実行を継続できます。 。 goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?

注目に値する点は、goto ステートメントとそのジャンプ ラベルが同じ関数内に存在する必要があるということです。

3. goto、break、および continue の違いは何ですか?

これは Jump ステートメントでもありますが、goto ステートメントと Break および continue ステートメントの違いは何ですか?

実際には、break と continue は goto の特殊な形式です。 Break と continue を使用する利点は、それらの名前がす​​でにその使用法を示していることです。

コード例を通して、break と continue の使用法を見てみましょう:

1. ブレークテスト関数

上記のテスト プログラムを使用して、break ステートメント

void TestBreak(void);

をテストする関数を構築します。例:

左右にスワイプしてすべてのコードを表示>>>

リーリー 操作結果:

実行結果から、break が現在のループを終了できることが明らかにわかります。 goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?

この例では、最初の Break ステートメントは現在の for ループを終了し、2 番目の Break ステートメントは現在の while ループを終了します。ブレークによってループを終了できることがわかります。

したがって、break と goto の特性によれば、多くのレベルのループから抜け出したい場合は、goto を使用する方が便利です。

2. テスト機能の続行

同様に、Continue ステートメント

void TestContinue(void);

をテストする関数を構築します。例:

左右にスワイプしてすべてのコードを表示>>>

リーリー 操作結果:

実行結果から、Continue によってこのループ (ループ全体ではなく) が終了し、次のループ (i はループの数を表します) に入ることができることが明らかです。 goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?

四、支持与反对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来处理错误!

以上がgoto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Feb 19, 2025 pm 04:54 PM

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールする方法 DeepSeekをインストールする方法 Feb 19, 2025 pm 05:48 PM

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

Bitget公式ウェブサイトのインストール(2025初心者ガイド) Bitget公式ウェブサイトのインストール(2025初心者ガイド) Feb 21, 2025 pm 08:42 PM

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

OUYI OKXインストールパッケージが直接含まれています OUYI OKXインストールパッケージが直接含まれています Feb 21, 2025 pm 08:00 PM

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

gate.ioインストールパッケージを無料で入手してください gate.ioインストールパッケージを無料で入手してください Feb 21, 2025 pm 08:21 PM

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

OUYI Exchangeダウンロード公式ポータル OUYI Exchangeダウンロード公式ポータル Feb 21, 2025 pm 07:51 PM

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

gate.io公式ウェブサイト登録インストールパッケージリンク gate.io公式ウェブサイト登録インストールパッケージリンク Feb 21, 2025 pm 08:15 PM

Gate.ioは、広範なトークン選択、低い取引手数料、ユーザーフレンドリーなインターフェイスで知られる高く評価されている暗号通貨取引プラットフォームです。高度なセキュリティ機能と優れたカスタマーサービスにより、Gate.ioは、信頼できる便利な暗号通貨取引環境をトレーダーに提供します。 gate.ioに参加する場合は、リンクをクリックして公式登録インストールパッケージをダウンロードして、暗号通貨取引の旅を開始してください。

ubuntuにnginxでphpmyadminをインストールする方法は? ubuntuにnginxでphpmyadminをインストールする方法は? Feb 07, 2025 am 11:12 AM

このチュートリアルは、既存のApacheサーバーに沿って、潜在的にubuntuシステムにnginxとphpmyAdminをインストールおよび構成することをガイドします。 Nginxのセットアップをカバーし、Apacheとの潜在的なポートの競合を解決し、Mariadbをインストールします(

See all articles