Matlab код для C с использованием Matlab кодера
У меня есть некоторый рабочий код 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.
Это выглядит очень специфично для меня (я не опытный программист на Си). Кто-нибудь может указать мне правильное направление, чтобы преодолеть эту ошибку? Благодарю.
PS:
Вот некоторый адаптированный код Matlab:
if(strcmpi(parameters.x,'bladibla') == 1)
% some code
else
% some more code
end
где "параметры" является структурой. Я хотел бы придерживаться своей структуры, но если есть лучшие способы для достижения вышеизложенного, особенно в контексте кодера Matlab и C, пожалуйста, дайте мне знать.
1 ответ
Особенность strcmpi() (сравнение строк без учета регистра) заключается в том, что это не стандартная функция C. Таким образом, код, который опирается на него, но пытается быть переносимым между платформами, иногда должен предоставлять свою собственную реализацию, откладывая реализацию системы, если таковая имеется. По моему опыту, собственная реализация strcmpi () проекта будет защищена опцией конфигурации. Если вы откроете c:\users\bla\project\strcmpi.h, вы можете увидеть код, подобный следующему:
#ifndef CONFIG_STRCMPI_PRESENT
int strcmpi(const char *string1, const char *string2);
#endif // CONFIG_STRCMPI_PRESENT
Если вы видите это, уловка для решения проблемы, вероятно, заключается в том, чтобы найти связанный файл config.h и раскомментировать следующую строку:
// #define CONFIG_STRCMPI_PRESENT
Это всего лишь предположение, основанное на моем опыте с аналогичными проблемами.