2

printf色で使用したい:

のようなもの:

#include <stdio.h>

#define KNRM  "\x1B[0m"
#define KRED  "\x1B[31m"
#define KGRN  "\x1B[32m"
#define KYEL  "\x1B[33m"
#define KBLU  "\x1B[34m"
#define KMAG  "\x1B[35m"
#define KCYN  "\x1B[36m"
#define KWHT  "\x1B[37m"

int main()
{
    printf("%sred\n", KRED);
    printf("%sgreen\n", KGRN);
    printf("%syellow\n", KYEL);
    printf("%sblue\n", KBLU);
    printf("%smagenta\n", KMAG);
    printf("%scyan\n", KCYN);
    printf("%swhite\n", KWHT);
    printf("%snormal\n", KNRM);

    return 0;
}
  • GCCでコンパイルされ、UNIX のようなプラットフォームでサポートされると仮定できますか?
  • そうでない場合、どうすればカラーで印刷できstdoutますか?
4

2 に答える 2

4

プラットフォームの機能ではなく、端末の機能です。

VT525 をコンピュータのシリアル ポートに接続すると、見事な ANSI カラーがすべて表示されます。VT100 を取り付けると、ほぼ黒地に緑が表示されます。IBM 2741 を取り付けると、ほとんどが白地に黒、またはこれらの色のテープを使用している場合は、おそらく茶色、青、緑、または赤になりますが、同時にではありません (手動でテープを交換する必要があります)。

最近では、すべてではありませんが、さまざまなウィンドウ システムで実行されるターミナル エミュレータの多くが、ANSI の色選択シーケンスをサポートしています。

Unix ライクなシステムでは、端末の機能 (色やその他の多くの機能) を検出して使用するための推奨される方法は、ncurses などのライブラリを使用することです。ライブラリは、端末または端末エミュレータに適したエスケープ シーケンスを選択し、カラーがサポートされていない場合はモノクロ印刷にフォールバックします。

于 2013-04-11T20:07:28.340 に答える
1

いいえ、あなたは本当にそれを仮定することはできません. すべてのプラットフォームに当てはまるわけではないだけでなく、端末の設定によっては、すべてのプラットフォームのすべてのユーザーに当てはまるとは限りません。

于 2013-04-11T19:26:19.867 に答える