По умолчанию строки 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 + + не генерируется в коде, даже если она имеет нулевое окончание. Вместо этого генератор кода создает массив символов 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