Xcode 5.1 C++98 char16_t

Xcode 5.1 C++98 char16_t

本文关键字:char16 C++98 Xcode      更新时间:2023-10-16

我需要编译一个c++(98。我还不能将代码迁移到mex文件中。

不幸的是,升级到Xcode 5.1 (Clang也更新到3.4版本)后,我无法编译代码。

这是同样的问题在这里:MEX编译错误:未知类型名称'char16_t'不幸的是,公认的答案是使用c++11支持进行编译,但我做不到。

在Clang的源代码中,我发现了这些行:

// In C11 these are environment macros. In C++11 they are only defined
// as part of <cuchar>. To prevent breakage when mixing C and C++
// code, define these macros unconditionally. We can define them
// unconditionally, as Clang always uses UTF-16 and UTF-32 for 16-bit
// and 32-bit character literals.
Builder.defineMacro("__STDC_UTF_16__", "1");
Builder.defineMacro("__STDC_UTF_32__", "1"); 

现在. .我想知道为什么如果他们定义宏,他们不定义类型char16_t。和也……我不能包含(文件未找到)cuchar (c++ 11)或uchar.h (C11)

有什么办法解决这个问题吗?

编辑:我想知道这是否是Clang的一个bug(我必须发出信号)。根据c++ 11标准(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2018.html), marco __STDC_UTF_16__应该在头文件cuchar中定义。但我找不到那份文件。因此,我认为宏是未定义的。我认为MEX包含文件依赖于这个事实。

只需在代码的某个地方定义char16_t(可能是CHAR16_T)作为宏。

#define char16_t uint16_t

或者,在编译时传递-DCHAR16_T=uint16_t标志。