C プログラミング言語と Linux での C プログラミングの違いは何ですか?
構文は両方で同じですか?
それとも、プログラムを実行したときだけ違いますか?
C 言語は、ISO 承認の C 標準によって管理されており、C を使用する基盤となるプラットフォームは考慮されていません。したがって、言語標準の観点からは違いはなく、標準に準拠したプログラムは C 標準で正しく動作します。両方。
ただし、実際の使用では、たとえば、IPC メカニズム、マルチスレッド、ファイル アクセスなど、プラットフォームに固有のプラットフォーム固有のことを行う必要があります。このような機能は、プラットフォームごとに異なります。それぞれが固有の機能を提供するからです。このような機能は C 言語標準でカバーされていないため、これを使用すると、プログラムが他のプラットフォーム間で移植できなくなることに注意してください。
Linux は、C などの言語を使用したプログラムやアプリケーションの開発に使用できるプラットフォームです。唯一のことは、その単純さと特定のオペレーティング システムへの好みだけです。それ以外の場合、構文に違いはありません。全く同じです。
言語があり、プラットフォームがあります。一般的な言語は通常、標準 (ANSI など) によって管理されています。C
プログラミング言語です。
Linux、Windows、Android などはプラットフォーム (具体的にはオペレーティング システム) です。各プラットフォームには、そのプラットフォームでさまざまなことを行うためにアクセスできる一連のライブラリ (API 呼び出し) が用意されています。ファイル システム アクセス、ネットワーク、特定のウィンドウ/GUI システムなどのシステム/ライブラリ呼び出しは、プラットフォームごとに異なる場合があります。したがって、「Linux で C を書く」方法を知っているということは、C を知っており、多くの Linux プラットフォームの呼び出しを知っているということです。Linux では、異なるウィンドウ システムでさえ、異なる API 呼び出しを持つことができます。
異なるプラットフォーム間でライブラリ呼び出しを同じにするために機能する、POSIX などのプラットフォーム間の標準もあります。これは、GUI API 間の不一致のほとんどを処理しませんが。
C 言語のプログラミング構文は、ISO C 標準で定義されています。結果の実行は、コードを実行可能プログラムに変換するために使用されるコンパイラーと、コンパイルが実行されるマシン (または少なくとも実行対象のアーキテクチャー) によって異なります。そのコンパイルの結果は、コンパイラによるそのコードの解釈に対するプログラミング構文 (コード) の使用に依存します。プログラマーがプログラミングの習慣を、実装定義の動作または未定義の動作を除いて適合する C コードを書くことに制限する場合、結果の実行可能ファイルはどのプラットフォームでも同じように動作します。
次に、カーネル プログラミング、システム プログラミング、およびユーザー空間プログラミングという、作成できる C 実装の大まかな 3 つの「層」があるかのように考えます。
カーネル プログラミングはハードウェア レベルのプログラミングであり、通常は実装で定義された動作を利用して、ハードウェアの世界をソフトウェアの世界に接続します。これらは、システム プログラマに C インターフェイスを提供します。それらはマシンごとに異なり、これらの実装から生じるアーキテクチャは、さまざまな OS 間の違いを定義します (例: ウィンドウ、Linux、OsX、MIT exokernel など)。
システム プログラマは、カーネル (システム) の API を利用して C 標準ライブラリを構築します (より高いレベルの C 標準機能の実装を定義します)。例: glibc と gnu c コンパイラ (gcc) は、C 標準の明確なセクションに準拠した ISO C である必要があり、実装定義および未定義の動作の実装を定義します。カーネルレベルはハードウェアの抽象化を構成するため、実装のそのレイヤーは (ある程度まで) ハードウェアに依存しません。ただし、それらはその抽象化レイヤーからのリソースを処理します (例: RAM、ハード ドライブ上のファイルへの書き込み、またはインターネット ソケットでのデータ ストリームの送信)。
ユーザースペースのプログラマーは、標準 API とコンパイラーを使用して、gnome-terminal や i3 ウィンドウ タイル マネージャーなどの「使用可能な」ソフトウェアを構築するプログラムをコーディングします (Windows で実行される「ユーザー フレンドリーな」C コードの例を見つけることができません)。頭の上から…)。これらのソフトウェア実装は、実装定義コードまたは未定義の動作コードに依存しない限り、プラットフォームに依存しない必要があります。
答えは簡単です。違いはありません。
ただし、各オペレーティング システムには独自の API があります。この API はプログラミング言語に依存しません。
例: 「MessageBox()」関数は Windows のみに存在し、Linux には存在しません。これは Windows 固有の関数です (Windows のどのプログラミング言語でも使用できます)。
Linux と Windows で名前が異なるライブラリ関数もあります。
一例として、Linux では「strcasecmp()」という名前の「stricmp()」関数 (Windows) があります。ただし、これは C プログラミング言語の問題ではなく、ライブラリ (.H ファイルと .SO ファイル) の問題です。