❶ 編譯器預定義的宏(可以用來區分使用的是哪種編譯器) 詳細�0�3
1、_MSC_VER 是微軟C/C++編譯器——cl.exe 編譯代碼時預定義的一個宏。需 要針對cl 編寫代碼時, 可以使用該宏進行條件編譯。 2、_MSC_VER 的值表示cl 的版本。需要針對cl 特定版本編寫代碼時, 也可以使用 該宏進行條件編譯。 3、_MSC_VER 的類型是"int",具體版本號定義如下: MS VC++ 9.0 _MSC_VER = 1500 MS VC++ 8.0 _MSC_VER = 1400 MS VC++ 7.1 _MSC_VER = 1310 MS VC++ 7.0 _MSC_VER = 1300 MS VC++ 6.0 _MSC_VER = 1200 MS VC++ 5.0 _MSC_VER = 1100 其中MS VC++ 9.0 就是Visual C++ 2008,MS VC++ 8.0 就是Visual C++2005。 二、介紹預定義宏「__GNUC__」 1、__GNUC__ 是gcc 編譯器編譯代碼時預定義的一個宏。需要針對gcc 編寫代碼時, 可以使用該宏進行條件編譯。 2、__GNUC__ 的值表示gcc 的版本。需要針對gcc 特定版本編寫代碼時,也可以使 用該宏進行條件編譯。 3、__GNUC__ 的類型是「int」 三、預定義宏"__MINGW32__" 1、MinGW編譯器 四、symbian sdk 預定義宏: symbian 平台,定義"__SYMBIAN32_" 3rd MR 版及之前的那個3rd 版本,定義"__SERIES60_30__" 3rd FP1 版,定義"__SERIES60_31__" 3rd FP2 版,定義"__SERIES60_32__" 另外,還有一個"__SERIES60_3x__"。若不需區分具體是哪一個3rd 版,則用之。
❷ 如何在MATLAB R2010a 中使用Visual C++ 2010編譯器
1、安裝補丁VS2010MEXSupport.zip
由於MATLAB R2010a 發布的時間要比 VS2010早,所以在該版本識別不了VC++2010編譯器。不過R2010a之後的版本應該不會有這種問題了。
解壓補丁包,將其中的文件放到 D:Program 文件夾下。
2、在MATLAB中安裝VC++ 2010 編譯器
打開Matlab,在 command window 中輸入 mex -setup
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?n (一定要選擇 n)
Select a compiler:
[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[2] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)
[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[4] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 Shell linker)
[5] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)
[6] Lcc-win32 C 2.4.1
[7] Microsoft Visual C++ 6.0
[8] Microsoft Visual C++ 2005 SP1
[9] Microsoft Visual C++ 2008 Express
[10] Microsoft Visual C++ 2008 SP1
[11] Microsoft Visual C++ 2010
[12] Microsoft Visual C++ 2010 Express
[13] Open WATCOM C++
[0] None
Compiler:12
注意,如果選擇 n 之後,沒有列出這么多編譯器選項,甚至沒有出現VC++ 2010。 不要慌,此時選擇 0,即None。
Compiler: 0
mex: No compiler selected. No action taken.
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the new
API. You can find more information about this at:
http://www.mathworks.com/support/solutions/en/data/1-5C27B9/?solution=1-5C27B9
Building with the -largeArrayDims option enables the new API.
然後在command window 里再次輸入 mex -setup。
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n?n (一定要選擇 n)
此時就會列出很多編譯器,包括已經VC++2010。如果還沒有,可重復幾次以上過程。當然前提是必須安裝VS2010,否則,再怎麼重復,也找不到VC++2010編譯器。
列出VC++2010編譯器之後,我相信接下該怎麼做對大家來說沒問題。
3、error C2371: 'char16_t' : redefinition; different basic types
在混合編程中,也許會出現如下錯誤:
C:Microsoft Visual Studio 10.0VCINCLUDEyvals.h(576) : error C2371: 'char16_t' : redefinition; different basic types
C:.h(330) : see declaration of 'char16_t'
原因是VS2010中的yvals.h添加了char16_t的定義,而Matlab的matrix.h也包含對char16_t的定義,所以同時包含這兩個頭文件的話,會導致重復定義char16_t的錯誤。
完全沒有必要修改這兩個頭文件(以防修改之後,會在將來導致一些問題),只需要在包含matrix.h之前包含yvals.h即可。例如:
#include<yvals.h>
#if(_MSC_VER>=1600)
#define__STDC_UTF_16__
#endif
#include"mex.h"
mex.h 包含matrix.h。這就要求我們必須知道所包含的頭文件是否包含matrix.h。