printf 사용 시 출력되는 문자열에 색상을 입힐 수 있다. printf로 로그를 출력할 때 유용하게 쓸 수 있다.
ANSI Escape Sequence를 사용하는데, 외우기가 어려워서 글로 정리하였다.
아래의 방법으로 적용할 수 있다.
방법:
printf("\033[색상코드;색상코드m
안녕하세요\033[0m
");
- 색상 적용 :
\033[색상코드;색상코드m
- 색상 해제 :
\033[0m
예시 코드를 보자.
#include <stdio.h>
int main(void)
{
printf("\033[0;30m안녕하세요\033[색상코드;색상코드m\n");
}
아래의 방법으로도 동일하게 적용할 수 있다.
#include <stdio.h>
int main(void)
{
printf("\033[0;30m안녕하세요\033[0m\n");
printf("\033[0;31m안녕하세요\033[0m\n");
printf("\033[0;32m안녕하세요\033[0m\n");
printf("\033[0;33m안녕하세요\033[0m\n");
printf("\033[0;34m안녕하세요\033[0m\n");
printf("\033[0;35m안녕하세요\033[0m\n");
printf("\033[0;36m안녕하세요\033[0m\n");
return 0;
}
실행하면 아래와 같이 출력된다.
글자색이 입혀진 것을 볼 수 있다.
\033[0;30m
라는 문자열이 잘 외워지지 않는다면 macro로 정의하여 사용하는 것을 추천한다.
위에 작성한 코드를 아래와 같이 고쳐보자.
#include <stdio.h>
#define COLOR_NONE "\033[0m"
#define COLOR_BLACK "\033[0;30m"
#define COLOR_RED "\033[0;31m"
#define COLOR_GREEN "\033[0;32m"
#define COLOR_BROWN "\033[0;33m"
#define COLOR_BLUE "\033[0;34m"
#define COLOR_PURPLE "\033[0;35m"
#define COLOR_CYAN "\033[0;36m"
#define log(x, str) printf(x str COLOR_NONE "\n");
int main(void)
{
log(COLOR_BLACK, "안녕하세요");
log(COLOR_RED, "안녕하세요");
log(COLOR_GREEN, "안녕하세요");
log(COLOR_BROWN, "안녕하세요");
log(COLOR_BLUE, "안녕하세요");
log(COLOR_PURPLE, "안녕하세요");
log(COLOR_CYAN, "안녕하세요");
return 0;
}
실행하면 위와 동일하게 출력된다.
주의할 점은 색상 적용 후 \033[0m
을 이용해 꼭 색상 적용을 해제해주어야 한다. 안그러면 적용된 색상이 계속 남아있어서 후에 호출되는 printf에도 동일한 색상이 그대로 적용되어버린다.
글자색 뿐만 아니라 배경색도 적용할 수 있으며, 위 예제에서 사용한 색상 외에도 더 다양한 색상을 적용할 수 있다고 한다.
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
필요 시 참고하면 될 것 같다.