По умолчанию, MATLAB® строки и символьные векторы-строки сопоставлены с символьными массивами C/C++ в сгенерированном коде. Чтобы сгенерировать строки C/C++ от строк MATLAB или символьных векторов-строк, строка MATLAB или символьный вектор-строка должны быть отключены пустым указателем (конец с нулем, 0
). Например, строка "Hello World"+char(0)
и символьный вектор-строка ['Hello World', 0]
отключены пустым указателем.
Если строка MATLAB или символьный вектор-строка не отключены пустым указателем, например, 'Hello World'
, строка MATLAB сопоставлена с символьными массивами { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' }
в сгенерированном коде C/C++.
В MATLAB рассмотрите эту функцию:
function t = CharArrayNullAtEnd() t = ['Hello World',0]; end
Соответствующий код C/C++, сгенерированный для этой функции:
void CharArrayNullAtEnd(char t[12]) { int i; static const char cv[12] = "Hello World"; for (i = 0; i < 12; i++) { t[i] = cv[i]; } }
Генерация строк C/C++ вместо символьных массивов улучшает удобочитаемость сгенерированного кода.
Примечание
Если продолжительность символов меньше LoopUnrollThreshold
, двойная заключенная в кавычки строка C/C++ не сгенерирована в коде, даже если это отключено пустым указателем. Вместо этого генератор кода производит символьный массив C, который имеет присвоения отдельного символа. По умолчанию, присвоенное значение к LoopUnrollThreshold
5
. Для получения дополнительной информации о развертывании цикла смотрите, Разворачивают циклы for и циклы parfor.
Когда вы сгенерируете строки C/C++ от отключенных пустым указателем строк MATLAB или символьного вектора-строки, используйте newline
функция в MATLAB представляет в виде строки или символьный вектор-строка. Карты генератора кода newline
функционируйте к символу новой строки '\n'
в сгенерированном коде. Если вы используете символьный '\n'
в коде MATLAB вместо этого, этого оставляют и сопоставляют с '\\n'
в сгенерированном коде.
В MATLAB рассмотрите эту функцию:
function StringNewline() string1 = ['Hello World' 0]; string2 = ['My MATLAB' 0]; formatSpecifier = ['%s' newline 0]; coder.cinclude('<stdio.h>'); coder.ceval('printf',coder.rref(formatSpecifier),coder.rref(string1)); coder.ceval('printf',coder.rref(formatSpecifier),coder.rref(string2)); end
Соответствующий код C/C++, сгенерированный для этой функции:
void StringNewline(const emlrtStack *sp) { static const char_T formatSpecifier[4] = "%s\n"; static const char_T string1[12] = "Hello World"; static const char_T string2[14] = "My MATLAB"; (void)sp; printf(formatSpecifier, string1); printf(formatSpecifier, string2); }
StringNewline
, если formatSpecifier
'%s\n'
вместо ['%s' newline 0]
, затем символьный '\n'
оставлен и у вас есть {'\\','n'}
в сгенерированном коде C/C++.Вектор-строка символа MATLAB, который имеет несколько пустых указателей, например, ['Hello', 0, 0]
, не поддерживается для генерации строки C/C++.
codegen
| coder
| coder.config
| newline
| coder.rref
| coder.ceval