我正在为一个小的 TUI(文本用户界面)练习开发 NCURSES 应用程序。不幸的是,我无法选择使用如此美妙而忠实的 ASCII。我的程序使用了很多 Unicode 框绘图字符。
我的程序已经可以检测终端是否支持颜色。我需要做类似的事情:
if(!supportsUnicode()) //I prefer camel-case, it's just the way I am.
{
fprintf(stderr, "This program requires a Unicode-capable terminal.\n\r");
exit(1);
}
else
{
//Yay, we have Unicode! some random UI-related code goes here.
}
Run Code Online (Sandbox Code Playgroud)
这不仅仅是简单地包含ncursesw和设置语言环境的问题。我需要获取特定的终端信息,如果不会发生,实际上会抛出错误。例如,当用户尝试以可爱的XTerm而不是支持 Unicode 的UXTerm.
是否有一种简单的方法可以确保数据类型在C/C++中的不同平台和体系结构中保持相同的大小?
在C++中,假设我编写了一个假设的,简单的程序:
#include <iostream>
int foo;
int main(void)
{
std::cout<<"Size of foo is "<<sizeof(foo)<<" bytes."<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所有这个程序都打印任意整数数据类型的大小并退出.在我的机器上,它返回foo4个字节的大小(我有一个64位机器).
但是,假设我为Arduino或其他ATMega驱动板编写此程序:
int foo;
void setup()
{
Serial.begin(9600);
Serial.print("Size of foo is ");
Serial.print(sizeof(foo));
Serial.println(" bytes.");
}
void loop(){}
Run Code Online (Sandbox Code Playgroud)
在我的Arduino UNO板上,这只返回2(与short我的机器相同的大小).
是否可以创建(优选跨平台)标头或声明以确保数据类型的大小是一定的大小,以免遇到精度问题或数量非常大的问题?
理想情况下,这不仅可以用于Arduino板,还可以用于其他紧凑型MCU(如PicKit).
我对Arduino和整个Arduino IDE都比较陌生,所以请原谅我,如果我错过了一些非常简单的东西.
arduino ×1
arduino-ide ×1
arduino-uno ×1
c ×1
c++ ×1
ncurses ×1
terminal ×1
types ×1
unicode ×1
widechar ×1