2014-03-25 55 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