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

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

Ограничения

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

Смотрите также

| | | | |

Похожие темы