По умолчанию строки 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.
Когда вы сгенерируете строки 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.ceval | coder.config | coder.rref | newline