Переменная с именем i386, сгенерированная Matlab Coder - PullRequest
3 голосов
/ 13 февраля 2020

Я генерирую код для функции с несколькими массивами переменного размера. Код должен быть скомпилирован как на linux (с g cc), так и на windows машинах (с MinGW).

Чтобы "обеспечить емкость" в этих переменных, Matlab создает несколько переменных счетчика, названных i349, i350, ..., i386, ... i400. Видимо, компилятору windows это не нравится. Выдает две ошибки:

строка x: error: expected identifier or '(' before numeric constant

строка y: error: lvalue required as left operand of assignment

строка y + 1: error: lvalue required as increment operand

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

Два вопроса:

  1. Почему эти имена переменных вызвать проблему с компилятором?

  2. Как я могу сказать Matlab не генерировать переменные с этими именами?

Ответы [ 2 ]

4 голосов
/ 13 февраля 2020

Почему эти имена переменных вызывают проблемы с компилятором?

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

Как я могу сказать Matlab не генерировать переменные с этими именами?

Ты не хочешь. Вместо этого передайте компилятору параметр -std=c..., чтобы он работал в стандартном режиме.

1 голос
/ 15 февраля 2020

Если вы получаете конфликт имен, который нельзя исправить с помощью флагов компилятора, вы можете использовать настройку ReservedNameArray с MATLAB Coder:

cfg = coder.config('lib');
cfg.ReservedNameArray = 'Name1;Name2';

codegen foo.m -config cfg

, что заставит Coder идентификаторы mangle не должны конфликтовать с указанными именами.

...