Xcode 5.1 C ++ 98 char16_t

时间:2014-03-25 14:22:14

标签: c++ clang mex

我需要将一个c ++(98。我无法迁移到11)代码编译成一个mex文件。

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

问题与此处相同:MEX compile error: unknown type name '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的错误(我必须发出信号)。 根据C ++ 11标准(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2018.html),marco __STDC_UTF_16__应该在头文件cuchar中定义。但我找不到那个文件。因此,我希望宏是未定义的。我认为MEX包含文件依赖于这个事实。

1 个答案:

答案 0 :(得分:2)

只需将char16_t(可能是CHAR16_T)定义为代码中的某个宏。

#define char16_t uint16_t

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