我需要将一个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包含文件依赖于这个事实。
答案 0 :(得分:2)
只需将char16_t
(可能是CHAR16_T
)定义为代码中的某个宏。
#define char16_t uint16_t
或者,在编译时传递-DCHAR16_T=uint16_t
标志。