私はCプログラミング言語を学び、それを使っていくつかの基本的なことをしようとしています。私が直面した問題は、コマンドライン引数をどのように解析するかです。私はこの回答を読みunistd.h
、標準のN1570内の関数のライブラリの概要を見つけようとしました。しかし、残念ながら、そこでは定義されていません(私が理解できる限り、POSIX準拠のOSでのみ機能します)。
AFAIK Windowsは実際にはPOSIXに準拠していないため、上記の回答のようなものです。
#include <unistd.h>
int main(int argc, char *argv[]){
int opt;
while((opt = getopt(argc, argv, "ilv") != -1){
//do some with it
}
}
本当にポータブルではありません。
質問:コマンドライン引数を解析するための標準化された移植可能な唯一の方法は、自分で行うことですか?
Cでコマンドライン引数を解析するための標準化された方法はありますか?
はいあります。C委員会ではなく、他の委員会によって標準化されています。最も一般的に普及しているのは、ユーティリティ規約とgetoptユーティリティを備えたPOSIXです。argpでGNU引数構文を使用するのは、楽しくてかっこいいです。一般的に使用されるグニュースもあるのgetopt_longのgetoptと長い引数をサポートするために。
コマンドライン引数を解析するための唯一の標準化された移植可能な方法は、自分でそれを行うことですか?
コマンドラインを解析するためのC11の方法で標準化されたものはありません。C11:メインの引数は文字列ですが、彼らはしている値は、単に実装定義であることのみを指定、
argcの値がゼロより大きい場合、配列メンバーargv [0]からargv [argc-1]までは、プログラムの起動前にホスト環境によって実装定義の値が与えられる文字列へのポインターを含むものとします。目的は、ホストされた環境の他の場所からプログラムを起動する前に決定された情報をプログラムに提供することです。
C標準では「コマンドライン」の抽象化が導入されていないため、「コマンドライン引数」とさらに「コマンドライン引数の解析」で構成される抽象化は定義されていません。コマンドライン引数を解析するための標準化された方法を導入することは、C標準の範囲外だと思います。
最も移植性の高い方法は、最も移植性の高いコードを記述して使用することです。実際、最も移植性の高いコードは、非標準のCライブラリを使用せず、最も移植性の高い方法で「自分で実行」します。考えられるすべてのアーキテクチャと環境をターゲットにする意味はほとんどありません。GNU / Linuxのみを使用するgetopt
場合、クレイジーな環境への移植性を維持しargp
たい場合や、GNU / Linux固有のシステムのみをターゲットにしたい場合に使用します。newlibのgetopt
ような組み込みシステム用のライブラリでさえ、実際に普及しており、実装されています。他の人にとっては、getoptのコードを他のソースからプログラムにコピー/インクルードするだけで、コードがない環境から保護できます。getopt
getopt_long
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加