2013-02-03 88 views
0

我有一些工作的Matlab代碼,我嘗試使用Matlab編碼器轉換成C代碼。我得到這個錯誤:Matlab代碼到C使用Matlab編碼器

18 c:\users\bla\project\strcmpi.h(79) : warning C4028: formal parameter 2 different from declaration 
19 c:\users\bla\project\strcmpi.h(79) : error C2371: 'strcmpi' : redefinition; different basic types 
20   c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\string.h(245) : see declaration of 'strcmpi' 
21 NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\amd64\cl.EXE"' : return code '0x2' 
22 Stop. 
23 The make command returned an error of 2 
24 'An_error_occurred_during_the_call_to_make' is not recognized as an internal or external command, 
25 operable program or batch file. 

它看起來非常特定於我(我不是一個熟練的C程序員)。任何人都可以請指出我在正確的方向來克服這個錯誤?謝謝。

PS:

下面是一些適於Matlab代碼:

if(strcmpi(parameters.x,'bladibla') == 1) 

    % some code 

else 

    % some more code 

end 

其中 '參數' 是一個結構。我想堅持我的結構,但如果有更好的方法來實現上述,特別是在Matlab編碼器和C的情況下,請讓我知道。

+0

您是否在Matlab代碼中使用'strcmpi'函數和coder.ceval?包括代碼的相關部分將有所幫助。 – sundar

+0

感謝您的評論。我已經添加了一些Matlab代碼(請參閱PS :)。 – cs0815

回答

1

關於strcmpi()(不區分大小寫的字符串比較)的事情是它不是標準的C函數。因此,依賴於它的代碼雖然試圖跨平臺移植,但有時必須提供自己的實現,同時推遲系統的實現(如果可用)。根據我的經驗,項目自己的strcmpi()實現將受到配置選項的保護。如果你打開C:\用戶\ BLA \項目\ strcmpi.h,你可能會看到類似的代碼如下:

#ifndef CONFIG_STRCMPI_PRESENT 
int strcmpi(const char *string1, const char *string2); 
#endif // CONFIG_STRCMPI_PRESENT 

如果你看到這一點,招解決該問題越來越將可能找到相關的config.h文件,取消以下行:

// #define CONFIG_STRCMPI_PRESENT 

這一切只是基於我類似問題的經驗猜測。

+0

感謝您的回答。我已經添加了一些Matlab代碼(請參閱PS :)。 – cs0815

+0

strcmpi()的高級用法不成問題。問題是在代碼庫周圍有兩個不同的strcmpi()定義。爲了解決這個問題,你需要消除其中一個strcmpi()實現,它可能是內置到項目中的(而不是系統版本)。 –