2014-03-25 58 views
1

我需要编译一个C++(98.我不能迁移到11)代码到一个mex文件。Xcode 5.1 C++ 98 char16_t

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

这是和在这里相同的问题:MEX compile error: unknown type name 'char16_t' 不幸的是,接受的答案是编译与我不能做的c + + 11支持。

在锵的源代码阅读,我发现这几行:

// 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)

如何解决这个问题的一些想法?

编辑:我想了解这是否是一个叮当(我必须表示它)的错误。 根据C++ 11标准(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2018.html),应在头文件cuchar中定义marco __STDC_UTF_16__。但是我找不到那个文件。因此,我期望这个宏是未定义的。我认为MEX包含文件依赖于这个事实。

回答

2

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

#define char16_t uint16_t 

或者,在编译时通过-DCHAR16_T=uint16_t标志。

+0

你可以看看我的编辑? – Francesco

+0

btw:我解决了在编译时定义'char16_t'(因为matlab查找该变量) – Francesco

+0

我不知道它是否是一个错误,但有一点可以肯定的是'char16_t'是一个C++ 11功能,而不是可以使用较早的C++标准。所以我认为宏只是依赖于C++ 98中的编译器实现。 – kyamagu