C++跨平台打印彩色文本



我实现了自己的跨平台打印彩色文本的方法。但是,我使用了宏。这是一种糟糕的做法还是应该避免的事情?如果是,你会推荐什么替代方法?

代码:

#ifndef CLIOUTPUT_H_
#include <stdio.h>
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#include <Windows.h>
#define _RED     0x0C
#define _GREEN   0x0A
#define _DEFAULT 0x0F
HANDLE __c = GetStdHandle(STD_OUTPUT_HANDLE);
#define _COLOREDTEXT(_msg, _color) do { 
SetConsoleTextAttribute(__c, _color); 
printf("%s", _msg); 
SetConsoleTextAttribute(__c, _DEFAULT); 
} while(false)
#elif __APPLE__ || __linux__
#define _RED     31
#define _GREEN   32
#define _DEFAULT 33[0m
#define _COLOREDTEXT(_msg, _color) do { 
printf("33[0;%dm%s33[0m", _color, _msg); 
} while(false)
#else
# error "Error"
#endif
#define CLIOUTPUT_H_
#endif // CLIOUTPUT_H_

没有宏不是一种糟糕的做法,相反,在某些情况下,它们是必须使用的,并且可以更好地控制代码在不同操作系统上的工作和编译方式。尽管它们可能很难正确使用。宏的一个常见用例是不同的库include(根据您构建的操作系统的不同,可能会有所不同(或DEBUG:

#ifdef DEBUG_MODE
// Code to execute in debug mode
// e.g: printing values of a data structure or state of your program
#endif

如果您的代码需要DEBUG_MODE,以便在控制台中显示一些信息,这将非常有用。

我仍然建议尽可能使用枚举或常量而不是宏,因为它们更容易调试,并且具有更好的类型安全性。

在你的情况下,我认为宏是一个很好的选择,因为颜色代码根据你使用的操作系统而不同!但我可能会在C/C++中定义函数COLOREDTEXT,因为它允许控制变量的类型。

最新更新