stdlib und farbige Ausgabe in C

Lesezeit: 3 Minuten

Ich mache eine einfache Anwendung, die eine farbige Ausgabe erfordert. Wie kann ich meine Ausgabe wie Emacs und Bash einfärben?

Ich interessiere mich nicht für Windows, da meine Anwendung nur für UNIX-Systeme ist.

Benutzeravatar von Andrejs Cainikovs
Andrejs Cainikovs

Alle modernen Terminalemulatoren verwenden ANSI-Escape-Codes, um Farben und andere Dinge anzuzeigen.
Kümmern Sie sich nicht um Bibliotheken, der Code ist wirklich einfach.

Mehr Infos sind hier.

Beispiel in C:

#include <stdio.h>

#define ANSI_COLOR_RED     "\x1b[31m"
#define ANSI_COLOR_GREEN   "\x1b[32m"
#define ANSI_COLOR_YELLOW  "\x1b[33m"
#define ANSI_COLOR_BLUE    "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN    "\x1b[36m"
#define ANSI_COLOR_RESET   "\x1b[0m"

int main (int argc, char const *argv[]) {

  printf(ANSI_COLOR_RED     "This text is RED!"     ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_GREEN   "This text is GREEN!"   ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_YELLOW  "This text is YELLOW!"  ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_BLUE    "This text is BLUE!"    ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_CYAN    "This text is CYAN!"    ANSI_COLOR_RESET "\n");

  return 0;
}

  • Aber ich nehme an, ich kann Bash in einer Terminalemulation ausführen, die ANSI-Escape-Seqs nicht unterstützt.

    – Shin Takezou

    10. Juli 2010 um 14:55 Uhr

  • Schöne Flagge 🙂 Nur eine Kleinigkeit, dass die Frage mit ‘c’ und nicht mit ‘c++’ getaggt ist.

    – Stefan

    10. Juli 2010 um 15:05 Uhr

  • @ShinTakezou: Ja .. In diesem Fall werden alle ANSI-Escape-Codes ignoriert, und Sie haben keine Optionen, um die ausgefallene Ausgabe vorzunehmen.

    – Andrejs Cainikovs

    10. Juli 2010 um 15:07 Uhr

  • ANSI-Escape-Sequenzen werden nicht von Shells interpretiert, sie werden von Terminal-Emulatoren interpretiert.

    – ninjalj

    10. Juli 2010 um 15:33 Uhr

  • Besonders gut gefallen hat das “Kümmere dich nicht um Bibliotheken”! ANSI-Codes funktionieren sogar in der Windows-Eingabeaufforderung.

    – SzG

    21. Dezember 2015 um 22:13 Uhr

Der Umgang mit Farbsequenzen kann unübersichtlich werden und verschiedene Systeme verwenden möglicherweise unterschiedliche Farbsequenzindikatoren.

Ich würde vorschlagen, dass Sie versuchen, es zu verwenden ncurses. Abgesehen von Farbe kann ncurses viele andere nette Dinge mit der Konsolen-Benutzeroberfläche machen.

  • Ist die Verwendung unterschiedlicher Farbsequenzen der Grund, warum ich keine “colors.h”-Datei mit all dieser für mich erledigten Arbeit finden kann?

    – Cooler Speer

    27. Januar 2018 um 20:10 Uhr

Sie können jeder Funktion eine Farbe zuweisen, um sie nützlicher zu machen.

#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)

foo()
{
LOG_RED("This is in Red Color");
}

Ebenso können Sie verschiedene Farbcodes auswählen und diese allgemeiner gestalten.

Benutzeravatar von Stephen
Stefan

Sie können spezielle Farbsteuercodes ausgeben, um eine farbige Terminalausgabe zu erhalten. Hier ist eine gute Ressource dazu wie man Farben druckt.

Zum Beispiel:

printf("\033[22;34mHello, world!\033[0m");  // shows a blue hello world

EDIT: My original one used prompt color codes, which doesn’t work 🙁 This one does (I tested it).

#include <stdio.h>

#define BLUE(string) "\x1b[34m" string "\x1b[0m"
#define RED(string) "\x1b[31m" string "\x1b[0m"

int main(void)
{
    printf("this is " RED("red") "!\n");

    // a somewhat more complex ...
    printf("this is " BLUE("%s") "!\n","blue");

    return 0;
}

reading Wikipedia:

  • \x1b[0m resets all attributes
  • \x1b[31m sets foreground color to red
  • \x1b[44m would set the background to blue.
  • both : \x1b[31;44m
  • both but inversed : \x1b[31;44;7m
  • remember to reset afterwards \x1b[0m

alhelal's user avatar
alhelal

If you use same color for whole program , you can define printf() function.

   #include<stdio.h>
   #define ah_red "\e[31m"
   #define printf(X) printf(ah_red "%s",X);
   #int main()
   {
        printf("Bangladesh");
        printf("\n");
        return 0;
   }

phuclv's user avatar
phuclv

Because you can’t print a character with string formating. You can also think of adding a format with something like this

#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)

f is format as in printf

PRINTC (4, "%s\n", "bar")

will print blue bar

PRINTC (1, "%d", 'a')

will print red 97

1424490cookie-checkstdlib und farbige Ausgabe in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy