Стиль кода системы управления

Можно изменить стиль кода, выражения приведения типа и добавление отступа сгенерированного кода, чтобы соответствовать определенным стандартам кодирования. Измените параметры стиля путем установки параметров на Code Generation> панель Code Style.

ЦельДействие
Задайте стиль parenthesization для сгенерированного кодаСмотрите круглые скобки управления в сгенерированном коде.
Задайте, сохранить ли порядок операндов в выраженияхСмотрите оптимизируют код путем переупорядочения заменимых операндов.
Задайте, сохранить ли пустые первичные выражения условия в операторах ifСмотрите выражение условия Заповедника в операторе if.
Задайте, сгенерировать ли код для логики решения if-elseif-else как операторы switch-caseСмотрите Преобразовывают if-elseif-else шаблоны в операторов case оператора switch.
Задайте, включать ли ключевое слово extern в объявления функции в сгенерированном кодеСмотрите ключевое слово экстерна Заповедника в объявлениях функции.
Задайте, включать ли ключевое слово static в объявления функции в сгенерированном кодеСмотрите Заповедник статическое ключевое слово в объявлениях функции.
Задайте, сгенерировать ли случаи default для операторов switch-case в коде для графиков Stateflow®Смотрите подавляют генерацию случаев по умолчанию для недостижимых операторов switch Stateflow.
Задайте, заменить ли умножение степенями двойки с поразрядными сдвигами со знакомСмотрите умножение замены степенями двойки с поразрядными сдвигами со знаком.
Задайте, позволить ли право со знаком, поразрядно переключает сгенерированный код C/C++ на нижний регистрСмотрите генерируют код со сдвигами вправо на целых числах со знаком.
Задайте, как генератор кода бросает типы данных для переменныхСмотрите выражения приведения типа управления в сгенерированном коде.
Задайте стиль отступа для сгенерированного кодаСмотрите стиль добавления отступа управления в сгенерированном коде.
Задайте символ новой строки в сгенерированном кодеСмотрите стиль новой строки управления в сгенерированном коде.
Задайте максимальную ширину линии для переноса сгенерированного кода.Смотрите ширину линии максимума управления сгенерированного кода.

Управляйте круглыми скобками в сгенерированном коде

Код С содержит некоторые синтаксически необходимые круглые скобки и может содержать дополнительные круглые скобки, которые изменяют семантику переопределяющим приоритетом оператора по умолчанию. Код С может также содержать дополнительные круглые скобки, которые не имеют никакого функционального значения, но только увеличивают удобочитаемость кода. Дополнительные круглые скобки C отличаются между двумя стилистическими экстремальными значениями:

  • Включайте минимальные круглые скобки, требуемые Синтаксисом C и переопределениями приоритета так, чтобы правила приоритета C задали всю семантику, если не заменено круглыми скобками.

  • Включайте максимальные круглые скобки, которые могут существовать без дублирования так, чтобы правила приоритета C стали не важными. Одни только круглые скобки полностью задают всю семантику.

Понимание кода с минимальными круглыми скобками может потребовать применения неочевидных правил приоритета. Максимальные круглые скобки могут препятствовать чтению кода путем избиения очевидных правил приоритета. Различные parenthesization стандарты существуют, которые задают один или другое экстремальное значение или задают промежуточный стиль, полезный для людей, которые считали код.

Для получения дополнительной информации об этом параметре смотрите уровень Круглых скобок.

Управляйте использованием круглых скобок

Этот пример показывает, что Embedded Coder® обеспечивает три уровня управления для круглых скобок в сгенерированном коде.

model='rtwdemo_parentheses';
open_system(model)

rtwdemoclean;
close_system(model,0)

Оптимизируйте код путем переупорядочения заменимых операндов

Этот пример показывает, как переупорядочить заменимые операнды, чтобы сделать выражения леворекурсивными. Эта оптимизация повышает эффективность кода.

Модель в качестве примера

Чтобы переупорядочить заменимые операнды, создайте следующую модель и назовите ее operand_order. В этой модели выходной сигнал является результатом умножения сигнала от блока Inport, In1 суммой сигналов от Inport блокирует In2 и In3.

Сгенерируйте код

  1. Откройте диалоговое окно Model Configuration Parameters. На вкладке Code Style выберите параметр Preserve operand order in expression.

  2. Сгенерируйте код для модели.

В файле operand_order.c функция operand_order_step содержит следующий код:

operand_order_Y.Out1 = operand_order_U.In1 * (operand_order_U.In2 +
    operand_order_U.In3);

Генератор кода сохраняет заданный порядок выражения в модели. Сохранение заданного порядка выражения увеличивает удобочитаемость кода в целях трассируемости кода.

Сгенерируйте код с оптимизацией

  1. Откройте диалоговое окно Model Configuration Parameters. На вкладке Code Style очистите параметр Preserve operand order in expression.

  2. Сгенерируйте код для модели.

В файле operand_order.c функция operand_order_step содержит следующий код:

operand_order_Y.Out1 = (operand_order_U.In2 + operand_order_U.In3) *
    operand_order_U.In1;

Генератор кода оптимизирует код путем переупорядочения заменимых операндов, чтобы сделать выражение леворекурсивным. Леворекурсивные выражения повышают эффективность кода.

Для получения дополнительной информации о параметре Preserve operand order in expression смотрите порядок операнда Заповедника в выражении.

Подавите генерацию случаев по умолчанию для недостижимых операторов switch Stateflow

Этот пример показывает, как задать, сгенерировать ли случаи по умолчанию для операторов case оператора switch в коде для диаграмм Stateflow. Сгенерированный код, который не содержит случаи по умолчанию, сохраняет потребление ROM и включает лучшее покрытие кода, потому что каждое ответвление в сгенерированном коде является фальсифицируемым.

Некоторые стандарты кодирования, такие как MISRA, требуют случая по умолчанию для операторов case оператора switch. Если вы хотите увеличить свои возможности создания MISRA C совместимый код, сгенерируйте случаи по умолчанию для недостижимых операторов switch Stateflow.

Пример

Рисунки 1, 2, и 3 показывают соответствующие фрагменты модели sldemo_fuelsys, система с обратной связью, содержащая объект и контроллер. Логикой контроллера скорости Воздушного топлива является диаграмма Stateflow, которая задает различные режимы работы.

Рисунок 1: модель верхнего уровня объекта и контроллера

Рисунок 2: Топливная подсистема контроллера скорости

Рисунок 3: Топливная логика контроллера скорости

Сгенерируйте код со случаями по умолчанию для недостижимых операторов switch Stateflow

  1. В Окне Команды MATLAB чтобы открыть sldemo_fuelsys через rtwdemo_fuelsys войдите:

    rtwdemo_fuelsys
  2. Откройте Образцовое диалоговое окно Параметров конфигурации. На вкладке Code Generation> Code Style очистите параметр Suppress generation of default cases for Stateflow statements if unreachable.

  3. В Окне Команды MATLAB, чтобы создать модель, введите:

    rtwbuild('sldemo_fuelsys/fuel_rate_control');

Для различных режимов работы файл fuel_rate_control.c содержит случаи по умолчанию для недостижимых операторов switch. Например, для режима работы Завершения работы, сгенерированный код содержит этот оператор по умолчанию:

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Fuel_Disabled = IN_NO_ACTIVE_CHILD;
 break;

Для режима работы Прогрева сгенерированный код содержит этот оператор по умолчанию:

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Low_Emissions = IN_NO_ACTIVE_CHILD;
 break;

Подавите случаи по умолчанию для недостижимых операторов switch Stateflow

  1. Откройте диалоговое окно Configuration Parameters. На вкладке Code Generation> Code Style выберите параметр Suppress generation of default cases for Stateflow statements if unreachable.

  2. Создайте модель.

Прочитайте файл fuel_rate_control.c. Случаи по умолчанию для недостижимых операторов switch не находятся в сгенерированном коде.

Для получения дополнительной информации о параметре Suppress generation of default cases for Stateflow statements if unreachable смотрите, Подавляют генерацию случаев по умолчанию для операторов switch Stateflow, если недостижимый.

Замените умножение степенями двойки с поразрядными сдвигами со знаком

Этот пример показывает, как сгенерировать код, который заменяет умножение степенями двойки с поразрядными сдвигами со знаком. Код, который содержит поразрядные сдвиги, более эффективен, чем код, который содержит умножение степенями двойки.

Некоторые стандарты кодирования, такие как MISRA, не позволяют битовые операции на целых числах со знаком. Если вы хотите увеличить свои возможности создания MISRA C совместимый код, не заменяйте умножение степенями двойки с поразрядными сдвигами.

Пример

Чтобы заменить умножение степенями двойки с поразрядными сдвигами, создайте следующую модель. В этой модели сигнале Data type int16 питается в блок Shift Arithmetic. В диалоговом окне Shift Arithmetic Block Parameters Bits to shift> параметр Direction устанавливается на Left. Bits to shift> параметр Number установлен в 3. Этот параметр соответствует значению 8, или возводящий в степень 2 из 3.

Сгенерируйте код с поразрядными сдвигами со знаком

  1. Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style. Параметр Replace multiplications by powers of two with signed bitwise shifts включен по умолчанию.

  2. Сгенерируйте код для модели.

В файле bitwise_multiplication.c ступенчатая функция bitwise_multiplication содержит этот код:

bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 << 3);

Целое число со знаком, bitwise_multiplication_U.In1, переключено три бита налево.

Сгенерируйте код с умножением степенями двойки

  1. Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style.

  2. Очистите параметр Replace multiplications by powers of two with signed bitwise shifts.

  3. Сгенерируйте код для модели.

В файле bitwise_multiplication.c ступенчатая функция bitwise_multiplication содержит этот код:

bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 * 8);

Целое число со знаком bitwise_multiplication_U.In1 умножается на 8.

Для получения дополнительной информации о параметре Replace multiplications by powers of two with signed bitwise shifts смотрите умножение Замены степенями двойки с поразрядными сдвигами со знаком.

Сгенерируйте код со сдвигами вправо на целых числах со знаком

Этот пример показывает, как управлять, содержит ли сгенерированный код сдвиги вправо на целых числах со знаком. Сгенерированный код, который не содержит сдвиги вправо на целых числах со знаком сначала, бросает целые числа со знаком к беззнаковому целому, и затем сдвиги вправо беззнаковое целое.

Некоторые стандарты кодирования, такие как MISRA, не позволяют сдвиги вправо на целых числах со знаком, потому что различное оборудование может сохранить отрицательные целые числа по-другому. Для отрицательных целых чисел можно получить различные ответы в зависимости от оборудования. Если вы хотите увеличить свои возможности создания MISRA C совместимый код, не позволяйте сдвиги вправо на целых числах со знаком.

Модель в качестве примера

Чтобы сгенерировать код со сдвигами вправо на целых числах со знаком, создайте следующую модель. В этой модели сигнале Data type int16 питается в блок Shift Arithmetic. В диалоговом окне Shift Arithmetic Block Parameters Bits to shift> параметр Direction устанавливается на Right. Bits to shift> параметр Number установлен в 3.

Сгенерируйте код со сдвигами вправо на целых числах со знаком

  1. Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style. Параметр Allow right shifts on signed integers включен по умолчанию.

  2. Сгенерируйте код для модели.

В файле rightshift.c функция rightshift_step содержит этот код:

rightshift_Y.Out1 = (int16_T)(rightshift_U.In1 >> 3);

Целое число со знаком rightshift_U.In1 переключено три бита направо.

Сгенерируйте код, который не позволяет сдвиги вправо на целых числах со знаком

  1. Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style. Очистите параметр Allow right shifts on signed integers.

  2. Сгенерируйте код для модели.

В файле rightshift.c функция rightshift_step содержит этот код:

rightshift_Y.Out1 = (int16_T)asr_s32(rightshift_U.In1, 3U);

Когда вы очищаете параметр Allow right shifts on signed integers, сгенерированный код содержит вызов функции вместо сдвига вправо на целом числе со знаком. Функциональный asr_s32 содержит этот код:

int32_T asr_s32(int32_T u, uint32_T n)
{
  int32_T y;
  if (u >= 0) {
    y = (int32_T)((uint32_T)u >> n);
  } else {
    y = -(int32_T)((uint32_T)-(u + 1) >> n) - 1;
  }
 
  return y;
}

Функция asr_s32 бросает целое число со знаком к беззнаковому целому, и затем сдвиги вправо беззнаковое целое.

Для получения дополнительной информации о параметре Allow right shifts on signed integers смотрите, Позволяют сдвиги вправо на целых числах со знаком.

Управляйте стилем добавления отступа в сгенерированном коде

Для добавления отступа кода можно установить следующие параметры:

  • Indent style управляет размещением фигурных скобок в сгенерированном коде.

  • Indent size управляет количеством символов на уровень отступа в сгенерированном коде (2–8 символов).

Можно установить Indent style на стиль Allman или K&R.

K&R

K&R поддерживает Кернигана и Ричи. Каждая функция имеет открытие и закрывающую фигурную скобку на ее собственной строке на том же уровне добавления отступа как функциональный заголовок. Код в функции располагается с отступом согласно Indent size.

Для блоков в функции вводные фигурные скобки находятся на той же строке как оператор управления. Закрывающие фигурные скобки находятся на новой строке на том же уровне добавления отступа как оператор управления. Код в блоке располагается с отступом согласно Indent size.

Например, вот сгенерированный код с набором Indent style к K&R с Indent size 2:

void rt_OneStep(void)
{
  static boolean_T OverrunFlag = 0;
  if (OverrunFlag) {
    rtmSetErrorStatus(rtwdemo_counter_M, "Overrun");
    return;
  }

  OverrunFlag = TRUE;
  rtwdemo_counter_step();
  OverrunFlag = FALSE;
}

Аллмен

Каждая функция имеет открытие и закрывающую фигурную скобку на ее собственной строке на том же уровне добавления отступа как функциональный заголовок. Код в функции располагается с отступом согласно Indent size.

Для блоков в функции открытие и закрывающие фигурные скобки для проверяют утверждения, находятся на новой строке на том же уровне добавления отступа как оператор управления. Это - основное отличие между стилями Allman и K&R. Код в блоке располагается с отступом согласно Indent size.

Например, вот сгенерированный код с набором Indent style к Allman с Indent size 4:

void rt_OneStep(void)
{
    static boolean_T OverrunFlag = 0;
    if (OverrunFlag)
    {
        rtmSetErrorStatus(rtwdemo_counter_M, "Overrun");
        return;
    }

    OverrunFlag = TRUE;
    rtwdemo_counter_step();
    OverrunFlag = FALSE;
}

Управляйте выражениями приведения типа в сгенерированном коде

Можно выбрать, как генератор кода задает броски типа данных в сгенерированном коде. В диалоговом окне Configuration Parameters выберите Code Generation> Code Style. От Casting modes выпадающий список три опции параметра управляют, как генератор кода бросает типы данных.

  • Nominal дает генератору кода команду генерировать код, который имеет минимальный кастинг типа данных. Когда вы не имеете требований информации о специальном типе данных, выбираете Nominal.

  • Standards Compliant дает генератору кода команду бросать типы данных, чтобы соответствовать стандартам MISRA®, когда это генерирует код. Кастинг типа данных MISRA устраняет общие стандартные нарушения MISRA, включая адресную арифметику и присвоение. Это уменьшает 10.1, 10.2, 10.3, и 10,4 нарушений.

    Для получения дополнительной информации см. MISRA C Инструкции.

  • Explicit дает генератору кода команду бросать значения типа данных явным образом, когда это генерирует код. Вы видите, как значение хранится, который говорит вам, сколько пространства памяти код использует для переменной. Тип данных сообщает вам, сколько точности возможно в вычислениях, включающих переменную.

Откройте модель rtwdemo_rtwecintro в качестве примера.

Включите номинальный режим кастинга и сгенерируйте код

Когда вы выбираете режим кастинга Nominal, генератор кода не создает броски типа данных для переменных в сгенерированном коде.

  1. На Code Generation> панель Code Style, от Casting modes выпадающий список, выбирают Nominal.

  2. На Code Generation> панель Report, выберите Create code generation report.

  3. На панели Code Generation выберите Generate code only.

  4. Нажмите Apply.

  5. В окне модели нажмите Ctrl+B, чтобы сгенерировать код.

  6. В Генерации кода сообщают о левой панели, нажимают rtwdemo_rtwecintro.c, чтобы видеть код.

/* Model step function */
void rtwdemo_rtwecintro_step(void)
{
  boolean_T rtb_equal_to_count;

  /* Sum: 'XRootX/Sum' incorporates:
   *  Constant: 'XRootX/INC'
   *  UnitDelay: 'XRootX/X'
   */
  rtDWork.X++;

  /* RelationalOperator: 'XRootX/RelOpt' incorporates:
   *  Constant: 'XRootX/LIMIT'
   */
  rtb_equal_to_count = (rtDWork.X != 16);

  /* Outputs for Triggered SubSystem: 'XRootX/Amplifier' incorporates:
   *  TriggerPort: 'XS1X/Trigger'
   */
  if (rtb_equal_to_count && (rtPrevZCSigState.Amplifier_Trig_ZCE != POS_ZCSIG))
  {
    /* Outport: 'XRootX/Output' incorporates:
     *  Gain: 'XS1X/Gain'
     *  Inport: 'XRootX/Input'
     */
    rtY.Output = rtU.Input << 1;
  }

  rtPrevZCSigState.Amplifier_Trig_ZCE = (uint8_T)(rtb_equal_to_count ? (int32_T)
    POS_ZCSIG : (int32_T)ZERO_ZCSIG);

  /* End of Outputs for SubSystem: 'XRootX/Amplifier' */

  /* Switch: 'XRootX/Switch' */
  if (!rtb_equal_to_count) {
    /* Update for UnitDelay: 'XRootX/X' incorporates:
     *  Constant: 'XRootX/RESET'
     */
    rtDWork.X = 0U;
  }
	
  /* End of Switch: 'XRootX/Switch' */
}

Включите стандартам совместимый режим кастинга и сгенерируйте код

Когда вы выбираете режим кастинга Standards Compliant, генератор кода создает стандарты MISRA совместимые броски типа данных для переменных в сгенерированном коде.

  1. На панели Code Style, от Casting modes выпадающий список, выбирают Standards Compliant.

  2. На панели Code Generation нажмите Apply.

  3. В окне модели нажмите Ctrl+B, чтобы сгенерировать код.

  4. В Генерации кода сообщают о левой панели, нажимают rtwdemo_rtwecintro.c, чтобы видеть код.

void rtwdemo_rtwecintro_step(void)
{
  boolean_T rtb_equal_to_count;
	
  /* Sum: '<Root>/Sum' incorporates:
   *  Constant: '<Root>/INC'
   *  UnitDelay: '<Root>/X'
   */
  rtDWork.X++;

  /* RelationalOperator: '<Root>/RelOpt' incorporates:
   *  Constant: '<Root>/LIMIT'
   */
  rtb_equal_to_count = (boolean_T)(int32_T)((int32_T)rtDWork.X != (int32_T)16);

  /* Outputs for Triggered SubSystem: '<Root>/Amplifier' incorporates:
   *  TriggerPort: '<S1>/Trigger'
   */
  if (((int32_T)rtb_equal_to_count) && (rtPrevZCSigState.Amplifier_Trig_ZCE !=
       POS_ZCSIG)) {
    /* Outport: '<Root>/Output' incorporates:
     *  Gain: '<S1>/Gain'
     *  Inport: '<Root>/Input'
     */
    rtY.Output = (int32_T)(uint32_T)((uint32_T)rtU.Input << (uint32_T)(int8_T)1);
  }

  rtPrevZCSigState.Amplifier_Trig_ZCE = (uint8_T)(int32_T)(rtb_equal_to_count ?
    (int32_T)(uint8_T)POS_ZCSIG : (int32_T)(uint8_T)ZERO_ZCSIG);

  /* End of Outputs for SubSystem: '<Root>/Amplifier' */

  /* Switch: '<Root>/Switch' */
  if (!rtb_equal_to_count) {
    /* Update for UnitDelay: '<Root>/X' incorporates:
     *  Constant: '<Root>/RESET'
     */
    rtDWork.X = 0U;
  }

  /* End of Switch: '<Root>/Switch' */
}

Включите явный режим кастинга и сгенерируйте код

Когда вы выбираете режим кастинга Explicit, генератор кода создает явные броски типа данных для переменных в сгенерированном коде.

  1. На панели Code Style, от Casting modes выпадающий список, выбирают Explicit.

  2. На панели Code Generation нажмите Apply.

  3. В окне модели нажмите Ctrl+B, чтобы сгенерировать код.

  4. В Генерации кода сообщают о левой панели, нажимают rtwdemo_rtwecintro.c, чтобы видеть код.

/* Model step function */
void rtwdemo_rtwecintro_step(void)
{
  boolean_T rtb_equal_to_count;

  /* Sum: '<Root>/Sum' incorporates:
   *  Constant: '<Root>/INC'
   *  UnitDelay: '<Root>/X'
   */
  rtDWork.X = (uint8_T)(1U + (uint32_T)(int32_T)rtDWork.X);

  /* RelationalOperator: '<Root>/RelOpt' incorporates:
   *  Constant: '<Root>/LIMIT'
   */
  rtb_equal_to_count = (boolean_T)((int32_T)rtDWork.X != 16);

  /* Outputs for Triggered SubSystem: '<Root>/Amplifier' incorporates:
   *  TriggerPort: '<S1>/Trigger'
   */
  if (((int32_T)rtb_equal_to_count) && ((int32_T)((int32_T)
        rtPrevZCSigState.Amplifier_Trig_ZCE != (int32_T)POS_ZCSIG))) {
    /* Outport: '<Root>/Output' incorporates:
     *  Gain: '<S1>/Gain'
     *  Inport: '<Root>/Input'
     */
    rtY.Output = rtU.Input << 1;
  }

  rtPrevZCSigState.Amplifier_Trig_ZCE = (uint8_T)(rtb_equal_to_count ? (int32_T)
	    POS_ZCSIG : (int32_T)ZERO_ZCSIG);

  /* End of Outputs for SubSystem: '<Root>/Amplifier' */

  /* Switch: '<Root>/Switch' */
  if (!(int32_T)rtb_equal_to_count) {
    /* Update for UnitDelay: '<Root>/X' incorporates:
     *  Constant: '<Root>/RESET'
     */
    rtDWork.X = 0U;
  }
	
  /* End of Switch: '<Root>/Switch' */
}

Управляйте стилем новой строки в сгенерированном коде

В сгенерированном коде символ новой строки отличается согласно операционной системе, на которой сгенерирован код. Можно настроить символ новой строки независимо от операционной системы. Установите стиль символа новой строки при помощи параметра Newline style.

Можно установить Newline style на любую из этих опций:

Значение по умолчанию

Эта опция выбрана по умолчанию. Это генерирует символ новой строки на основе операционной системы, на которой сгенерирован код. Например, если код сгенерирован на машине Windows®, символом новой строки, вставленным по умолчанию, является "\r\n". Если код сгенерирован на машине UNIX®, символом новой строки, вставленным по умолчанию, является "\n".

LF (Перевод строки)

Эта опция позволяет вам добавить символ Перевода строки (LF). "\n" вставляется как символ новой строки.

CR+LF (возврат каретки + перевод строки)

Эта опция позволяет вам добавить символ Возврата каретки + перевода строки (CR+LF). "\r\n" вставляется как символ новой строки.

Управляйте максимальной шириной линии сгенерированного кода

Можно настроить максимальную ширину линии для переноса сгенерированного кода. Чтобы задать любое целое число в области значений 50-1000, используйте параметр Maximum line width. Значением по умолчанию является 80.

Если комментарии превышают максимальную заданную ширину линии, комментарии хвоста сгенерированы на новой строке с выравниванием по правому краю. Другие типы комментариев не перенесены:

  • Комментарии хвоста #define

  • Комментарии блока Simulink

  • Комментарии объекта Stateflow

  • Комментарии баннера

Например, вот сгенерированный код, который перенесен с помощью значения Maximum line width по умолчанию 80:

/* Definition for custom storage class: Default */
real_T const_val[4] = { 1.0, 2.0, 3.0, 4.0 } ;
                  /* This parameter defines the vector of output index values */
Комментарии хвоста сгенерированы на новой строке с выравниванием по правому краю.

Вот тот же код, перенесенный с набором Maximum line width к 120:

/* Definition for custom storage class: Default */
real_T const_val[4] = { 1.0, 2.0, 3.0, 4.0 } ;/* This parameter defines the vector of output index values */

Связанные примеры

Больше о