По умолчанию MATLAB® строки и векторы строк символов отображаются в символьные массивы C/C + + в сгенерированном коде. Чтобы сгенерировать строки C/C + + из строк MATLAB или векторов символьных строк, строка MATLAB или вектор символьных строк должны быть нулевыми (конец на нуле 0). Для примера строка "Hello World"+char(0) и символьные векторы-строки ['Hello World', 0] имеют нулевое значение.
Если строка MATLAB или символ вектора-строки не оконечна null, для примера '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 + + с двойной кавычкой не генерируется в коде, даже если она завершена null. Вместо этого генератор кода создает символьный массив C, который имеет отдельные назначения символов. По умолчанию присвоенное значение LoopUnrollThreshold является 5. Для получения дополнительной информации о размонтировании цикла см. Раздел «Разрегулирование циклов для циклов».
Когда вы генерируете строки 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