为啥它被称为“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_t
是 typedef
,而 typedef
s 在 C 标准库中具有该后缀。
【讨论】:
谢谢。我没有意识到它最初是 C 的一部分。 但它发生在 C++ 出现并且新的 ISO 标准被敲定的时候。 我知道 C++ 的设计目标之一是尽可能地与标准 C 保持兼容。我可以理解他们的决定,但我不能说我同意这个特定的动机。 如果我没记错的话,那是一条双向街道,C 从 C++ 中导入了函数原型【参考方案2】:C 标准库已将 _t
后缀用于库中定义的许多类型(与作为关键字嵌入 C 本身的类型相反)。
例如有time_t
、wchar_t
、uint32_t
、size_t
、ptrdiff_t
、div_t
等
有趣的是(无论如何对我来说)C 标准并没有为自己保留该形式的名称。 C 标准确实表明以“str
”、“mem
”开头的名称和一些其他前缀可能会在未来添加到标准中,但它不会对以“_t
” - 除了以“int
”或“uint
”开头并以“_t
”结尾的名称之外,将来可能会添加到<stdint.h>
。但是,POSIX 会保留所有以“_t
”结尾的名称。
【讨论】:
【参考方案3】:我认为这是 C 和 C++ 成长过程中的一个“阶段”。感觉需要一些新的类型,但添加新的关键字总是有争议的。一些代码已经在使用wchar
,更少的代码会使用wchar_t
。注意size_t
和diff_t
属于同一时代。
【讨论】:
以上是关于为啥它被称为“wchar_t”而不是简单的“wchar”?的主要内容,如果未能解决你的问题,请参考以下文章