【发布时间】:2017-04-04 16:03:52
【问题描述】:
wint_t 类型通过stddef.h 设置在wchar.h 中,使用的是默认情况下在编译器中已经定义了__WINT_TYPE__。所以要改变
typedef unsigned int wint_t;
进入
typedef wchar_t wint_t;
我们可以在wchar.h开头使用下面的代码
#undef __WINT_TYPE__
#define __WINT_TYPE__ wchar_t
#define WEOF (-1)
但this 评论表明这样做“破坏了对 C++ 修改的兼容性”。
你不能在不破坏 ABI 兼容性的情况下更改 typedef 的现有定义,例如 wint_t(即使你有相同的大小和 签名等与 C 的 ABI 兼容,改变了底层类型 破坏了对 C++ 修改的兼容性)。
那么,为什么这个 typedef 不能被改变,什么是“C++ mangling 的兼容性”?
另请参阅此问题How to change wchar.h to make wchar_t the same type as wint_t?
【问题讨论】:
-
在 C++ 中,
wchar_t是一个分离的类型 -
也就是说,具有 C 链接的函数不包括修饰中的类型,所以我不完全确定这样的更改会如何影响任何与 C++ 相关的内容。另见[diff.wchar.t];没有这样的 typedef 会暴露给 C++。
标签: c++ c compatibility glibc abi