goto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?
C 言語の goto ステートメントについては多くの議論があり、多くの書籍では「使用には注意するか、使用を避けること」が推奨されています。ただし、Linux の父である Linus の実践では、Linux で goto ステートメントが広く使用されており、この機能も私たちにこの機能を合理的に使用するきっかけを与えてくれました。
論争があるため、goto ステートメントの使用方法を学ぶ必要があります。 goto ステートメントの基本的な構文と例を見てみましょう:
1. gotoの基本構文
goto ステートメントは、キーワード goto とラベル名の 2 つの部分で構成されます。ラベルの命名規則は変数の命名規則と同じです。例: ### リーリー
このステートメントが正しく動作するには、関数に、次のように、ラベル名で始まり、その後にコロンが続く、label というラベルが付いた別のステートメントも含める必要があります。label:printf(“ここに移動します。\n”);
2. goto
の例
左右にスワイプしてすべてのコードを表示>>>リーリー 操作結果:
実行結果から、複数のループからジャンプできる goto の使用法が明らかにわかります。プログラムの実行中に goto ステートメントに遭遇すると、そのラベルにジャンプして実行を継続できます。 。
注目に値する点は、goto ステートメントとそのジャンプ ラベルが同じ関数内に存在する必要があるということです。
3. goto、break、および continue の違いは何ですか?これは Jump ステートメントでもありますが、goto ステートメントと Break および continue ステートメントの違いは何ですか?
実際には、break と continue は goto の特殊な形式です。 Break と continue を使用する利点は、それらの名前がすでにその使用法を示していることです。
コード例を通して、break と continue の使用法を見てみましょう:
1. ブレークテスト関数上記のテスト プログラムを使用して、break ステートメント
void TestBreak(void); をテストする関数を構築します。例:
リーリー 操作結果:
実行結果から、break が現在のループを終了できることが明らかにわかります。
この例では、最初の Break ステートメントは現在の for ループを終了し、2 番目の Break ステートメントは現在の while ループを終了します。ブレークによってループを終了できることがわかります。
したがって、break と goto の特性によれば、多くのレベルのループから抜け出したい場合は、goto を使用する方が便利です。
2. テスト機能の続行同様に、Continue ステートメント
void TestContinue(void); をテストする関数を構築します。例:
リーリー 操作結果:
実行結果から、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来处理错误!
以上がgoto は Linux カーネルで広く使用されているのに、多くの書籍でその使用が推奨されていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ユーザーアカウント管理のLinuxとWindowsの主な違いは、許可モデルと管理ツールです。 Linuxは、UNIXベースの権限モデルとコマンドラインツール(useradd、usermod、userdelなど)を使用し、Windowsは独自のセキュリティモデルとグラフィカルユーザーインターフェイス(GUI)管理ツールを使用します。

linux'scommandlinecanbemoresecurethanwindowsifmanaged correctly、butrequiresmoreuserknowledge.1)linux'sourcenatureallowsforquicksecurityupdates.2)MissuturaturecurationCanleadtovulnerabilities.windows'commandlinism command-contontontrollededblessed-blessedlestlessed

このガイドでは、LinuxのブーツにUSBドライブを自動的に取り付け、時間と労力を節約する方法について説明します。 ステップ1:USBドライブを特定します LSBLKコマンドを使用して、すべてのブロックデバイスをリストします。 USBドライブにはラベルが付いている可能性があります /dev /sdb1、 /dev /sdc1など

クロスプラットフォームアプリケーションは、ソフトウェア開発に革命をもたらし、Linux、Windows、MacOなどのオペレーティングシステム間でシームレスな機能を可能にします。 これにより、デバイスに基づいてアプリを切り替える必要性がなくなり、一貫した体験を提供します

人工知能(AI)は、ヘルスケアや金融から芸術や音楽などの創造的な分野に至るまで、多くのセクターを急速に変革しています。 Linuxは、オープンソースの性質、適応性、パフォーマンス機能を備えており、最高のPlatfoとして浮上しています

グラフィカルユーザーインターフェイス(GUI)なしで、高速で最小限で効率的なLinuxディストリビューションをお探しですか? 軽量のガイレスLinuxディストリビューションは、古いハードウェアやサーバーや組み込みシステムなどの特殊なタスクに最適です。彼らはより少ないresを消費します

ワイン10.0安定バージョンリリース:LinuxでWindowsアプリケーションをより高いレベルに実行する このオープンソースと無料アプリケーションであるWineは、LinuxユーザーがUNIX/LinuxオペレーティングシステムでWindowsソフトウェアとゲームを実行できるようにし、10.0 Stableバージョンのリリースを紹介します。このバージョンには、ソースコードとバイナリパッケージのダウンロードが提供されており、Linux、Windows、Macなどのさまざまな分布をサポートしています。 このエディションは、1年の努力と8,600を超える改善を具体化し、多くのエキサイティングな改善をもたらします。重要なハイライトは次のとおりです。 Bluetoothデバイスの強化されたサポート。 HID入力デバイスのサポートを改善します。 32ビットおよび64ビットアプリケーションの最適化されたパフォーマンス。

このチュートリアルは、rhel 8.xまたは9.xにSQL Server 2022をインストールし、SQLCMDコマンドラインツール、データベース作成、および基本クエリを介して接続することをガイドします。 前提条件 始める前に、次のことを確認してください サポートされているRHELバージョン(RHEL 8または9)。 sudo


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









