2

Cで端末アプリケーションでユーザーのOSを確認するにはどうすればよいですか? たとえば、以下のコードでは、何と何を置き換えればよいwindowsでしょlinuxうか?

/* pseudo code */
if(windows)
{system(cls)}
else if(linux)
{system(clear)}
else{...}

私は C の初心者であり、それぞれに別のソースを作成することなく、Windows や Linux でコードを動作させるために、このようなものが必要です。

4

3 に答える 3

5

通常、これはビルド システムのマクロで行われます (システムごとにコードをビルドする必要があるためです。

例えばgcc -DLINUX myfile.c

そして myfile.c に

 #ifdef LINUX
    ... do stuff for linux ... 
 #else if defined(WINDOWS)
    ... do something for windows ... 
 #else if ... and so on. 
    ... 
 #endif

(ほとんどの場合、そのアーキテクチャー用にコンパイルするために使用しているツール用の定義済みマクロ-D<something>を使用することにより、実際にはコマンド ラインにa を追加する必要のない方法を見つけることができます)。

別の方法として、「クリア スクリーン」のANSI エスケープ シーケンスを出力することで、同じことを行うことができます。

putstr("\033" "2J"); 

はい、これは 2 つの文字列です"\0332J"。コンパイルを記述した場合0332、文字 033 ではなく文字 が使用され、その後に数字の 2 が続くためです。

于 2013-07-06T19:49:12.437 に答える
1

コンパイル中に「関数」を特殊化することで、実行時チェックを回避できると思います。では、次のようにするとどうでしょうか。

#ifdef WIN32
   CLEAR = cls
#elif __linux__ 
   CLEAR = clear
#endif

事前定義はコンパイラによって異なるため、次の一覧を参照してください: http://sourceforge.net/p/predef/wiki/OperatingSystems/

于 2013-07-06T19:47:08.213 に答える
0

おそらく、実行時ではなくコンパイル時に環境を検出する方がよいでしょう。C のようなコンパイル済み言語では、Java などの言語の場合とは異なり、異なるプラットフォームで同じコンパイラ出力を実行することはないため、実行時にこの種のチェックを行う必要はありません。

これは、コードがコンパイルされているプラ​​ットフォームを特定するために使用するヘッダーです。OS(およびその他のもの)に応じて異なるマクロを定義します。

使用中のこのようなもの:

#if defined(UTIL_PLATFORM_WINDOWS)
    printf("windows\n");
#elif defined(UTIL_PLATFORM_UNIXLIKE)
    printf("Unix\n");
#endif
于 2013-07-06T19:46:46.300 に答える