Сгенерируйте строки C/C + + из строк MATLAB и векторов-строк символов

По умолчанию 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);
}
В функции MATLAB StringNewline, если formatSpecifier является '%s\n' вместо ['%s' newline 0], затем символ '\n' сбежал, и у вас есть {'\\','n'} в сгенерированном коде C/C + +.

Ограничения

Символьный вектор-строка MATLAB, который имеет несколько нулей, для примера ['Hello', 0, 0], не поддерживается для генерации строк на C/C + +.

См. также

| | | | |

Похожие темы