为啥它被称为“wchar_t”而不是简单的“wchar”?

Posted

技术标签:

【中文标题】为啥它被称为“wchar_t”而不是简单的“wchar”?【英文标题】:Why is it called 'wchar_t' and not simply 'wchar'?为什么它被称为“wchar_t”而不是简单的“wchar”? 【发布时间】:2010-11-30 05:18:12 【问题描述】:

我经常想知道为什么 C++ 使用名称 wchar_t 而不是简单的 wchar,但我一直无法找到答案。搜索引擎无济于事,因为他们认为我在询问 Windows 的 WCHAR 类型。有什么想法吗?

【问题讨论】:

您可能想查看 ANSI 标准何时编写以及 MS 何时将 wchar 添加到他们的编译器中。 wchar_t 可能是为了区分它和 MS 支持的 wchar。我可能是错的,所以我会这样做作为评论,所以我不会被否决。 :) 我感觉标准委员会并不像 MS 愿意相信的那样关心 MS 所做的事情 ;) 【参考方案1】:

这是 C 的遗留物,其中 wchar_ttypedef,而 typedefs 在 C 标准库中具有该后缀。

【讨论】:

谢谢。我没有意识到它最初是 C 的一部分。 但它发生在 C++ 出现并且新的 ISO 标准被敲定的时候。 我知道 C++ 的设计目标之一是尽可能地与标准 C 保持兼容。我可以理解他们的决定,但我不能说我同意这个特定的动机。 如果我没记错的话,那是一条双向街道,C 从 C++ 中导入了函数原型【参考方案2】:

C 标准库已将 _t 后缀用于库中定义的许多类型(与作为关键字嵌入 C 本身的类型相反)。

例如有time_twchar_tuint32_tsize_tptrdiff_tdiv_t

有趣的是(无论如何对我来说)C 标准并没有为自己保留该形式的名称。 C 标准确实表明以“str”、“mem”开头的名称和一些其他前缀可能会在未来添加到标准中,但它不会对以“_t” - 除了以“int”或“uint”开头并以“_t”结尾的名称之外,将来可能会添加到<stdint.h>。但是,POSIX 会保留所有以“_t”结尾的名称。

【讨论】:

【参考方案3】:

我认为这是 C 和 C++ 成长过程中的一个“阶段”。感觉需要一些新的类型,但添加新的关键字总是有争议的。一些代码已经在使用wchar,更少的代码会使用wchar_t。注意size_tdiff_t属于同一时代。

【讨论】:

以上是关于为啥它被称为“wchar_t”而不是简单的“wchar”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 alter 命令称为 DDL 而不是 DML?

为啥它被称为“字符串”? [复制]

使用字符串初始化 wchar_t[]

如果段错误不可恢复,为啥称为错误(而不是中止)?

为啥 Windows 32 位称为 Windows x86 而不是 Windows x32? [关闭]

为啥 operator% 被称为“模数”运算符而不是“余数”运算符?