GCC (GNU Compiler Collection) は、人気のあるオープン ソース コンパイラとして、Linux ソフトウェア開発の標準機能の 1 つになっています。 Linux プログラミングの世界に参入したい場合は、GCC コマンドをマスターすることが不可欠です。初心者でもプロの開発者でも、GCC は無限の可能性を広げます。
gcc コンパイラは、コマンド ライン オプションのほぼ無限のリストを提供します。もちろん、すべてのコマンド ライン オプションを使用したり、それらを使いこなす人はいないでしょうが、すべての gcc ユーザーが、知る必要がない場合でも知っておくべきコマンド ライン オプションがいくつかあります。それらの中には、一般的に使用されるものと、あまり一般的に使用されないものがありますが、一般的に使用されないからといって、前者よりも有用性が低いというわけではありません。
このシリーズの記事では、珍しいが便利な gcc コマンド ライン オプションに焦点を当てます。そのようなコマンド ライン オプションのいくつかは最初のセクションで説明されています。
この一連のチュートリアルの最初の部分で、開発者が警告を生成するために通常使用する -Wall オプションについて簡単に説明しましたが、特別な警告は含まれていません。これらの特別な警告について知らなくても、生成方法がわからなくても、心配しないでください。この記事で詳細を説明します。
これに加えて、この記事では、浮動小数点値に関連する gcc 警告オプションと、gcc コマンド ライン オプション リストが大きくなった場合にそれをより適切に管理する方法についても説明します。
続行する前に、このチュートリアルのすべての例、コマンド、手順が Ubuntu 16.04 LTS オペレーティング システムと gcc 5.4.0 でテストされていることを思い出してください。
-Wall オプションが含まれていない場合に警告を生成する
gcc コンパイラの -Wall オプションはほとんどの警告フラグをカバーしますが、生成できない警告もいくつかあります。それらを生成するには、-Wextra オプションを使用します。
たとえば、次のコード:
リーリー誤って if 条件の後に余分なセミコロンを入れてしまいました。ここで、次の gcc コマンドを使用してコンパイルしても、警告は生成されません。
gcc -Wall test.c -o test
ただし、 -Wextra オプションを同時に使用してコンパイルすると、 gcc -Wall -Wextra test.c -o test
次のような警告が生成されます:
上記の警告から、-Wextra オプションにより -Wempty-body オプションが内部から有効になるため、疑わしいコードが検出され、警告が生成されることがわかります。以下は、このオプションで有効になるすべての警告フラグです。
リーリー上記のタグについて詳しく知りたい場合は、gcc のマニュアルを参照してください。
さらに、-Wextra オプションは、次の状況が発生した場合にも警告を生成します:
リーリー浮動小数点値が等しいかどうかを比較するときに警告を生成します
浮動小数点値は完全に等しいかどうかを比較できないことはすでにご存知かもしれません (そうでない場合は、浮動小数点値の比較に関する FAQ をお読みください)。しかし、誤ってこれを実行した場合、gcc コンパイラはエラーまたは警告を発行しますか?テストしてみましょう:
以下は == 演算子を使用して浮動小数点値を比較するコードです:
リーリー次の gcc コマンド (-Wall および -Wextra オプションを含む) を使用して、このコードをコンパイルします。 リーリー
残念ながら、上記のコマンドでは、浮動小数点値の比較に関連する警告は生成されません。 gcc マニュアルをざっと見てみると、この状況で使用できる専用の -Wfloat-equal オプションがあることがわかります。
このオプションを含むコマンドは次のとおりです:
リーリー
リーリー
上記の出力でわかるように、-Wfloat-equal オプションを使用すると、gcc コンパイラーは浮動小数点値の比較に関連する警告を生成します。このオプションに関する gcc マニュアルの説明は次のとおりです:
#「」 この背後にある考え方は、プログラマにとって、浮動小数点値をほぼ無限に正確な実数として考えると便利な場合があるということです。これを行う場合は、コードのプロファイリングなどによって、この計算によってもたらされる最大または考えられる最大誤差を把握し、比較を行うとき (および出力を生成するとき) にこれを許容する必要がありますが、それは別のことです。質問)エラーです。特に、等しいかどうかをチェックするのではなく、2 つの値の範囲が重複する可能性があるかどうかをチェックする必要があります。これは関係演算子を使用して行われるため、等価比較が間違いである可能性があります。
」#gcc コマンドライン オプションをより適切に管理する方法
如果在你使用的 gcc 命令中,命令行选项列表变得很大而且很难管理,那么你可以把它放在一个文本文件中,然后把文件名作为 gcc 命令的一个参数。之后,你必须使用@file 命令行选项。
比如,下面这行是你的 gcc 命令:
gcc -Wall -Wextra -Wfloat-equal test.c -o test
然后你可以把这三个和警告相关的选项放到一个文件里,文件名叫做 gcc-options:
$ cat gcc-options
-Wall -Wextra -Wfloat-equal
这样,你的 gcc 命令会变得更加简洁并且易于管理:
gcc @gcc-options test.c -o test
下面是 gcc 手册关于 @file 的说明:
“
从文件中读取命令行选项。读取到的选项随之被插入到原始 @file 选项所在的位置。如果文件不存在或者无法读取,那么这个选项就会被当成文字处理,而不会被删除。
文件中的选项以空格分隔。选项中包含空白字符的话,可以用一个由单引号或双引号包围完整选项。任何字符(包括反斜杠: ‘/’)均可能通过一个 ‘/’ 前缀而包含在一个选项中。如果该文件本身包含额外的 @file选项,那么它将会被递归处理。
”
结论
在这个系列的教程中,我们一共讲解了 5 个不常见但是很有用的 gcc 命令行选项:
-Save-temps -g -Wextra -Wfloat-equal @file
记得花时间练习使用每一个选项,同时不要忘了浏览 gcc 手册上面所提供的关于它们的全部细节。
因此,无论你是正在学习Linux编程,还是已经成为一名经验丰富的开发者,掌握GCC命令将会让你事半功倍。尝试使用GCC命令去编译各种不同的程序,挑战自己的极限,让你的Linux编程之路越来越精彩
以上がGCC コマンド: Linux プログラミングの無限の可能性を解き放つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。