Генератор кода резервирует использование определенных идентификаторов в сгенерированном коде. Эти идентификаторы включают ключевые слова C и C++ и стандартные имена библиотек C и C++. Использование этих ключевых слов в MATLAB® код как идентификаторы или имена функции может привести к их переименованию генератором кода. Если вы не находите переменные или функции, которые имеют зарезервированные ключевые слова в качестве имен в вашем сгенерированном коде, они могли быть переименованы генератором кода.
Примечание
Большинство имен переменных можно сохранить, кроме зарезервированных ключевых слов, в сгенерированном коде. См. «Сохранение имен переменных в сгенерированном коде».
_Bool | _Complex | _Generic | _Imaginary |
_Noreturn | _Static_assert | _Thread_local | threads |
asm | auto | assert | case |
char | const | continue | default |
complex | void | time | tgmath |
ctype | iso646 | stdatomic | stddef |
do | double | else | enum |
extern | float | for | goto |
if | inline | int | long |
limits | locale | stdbool | stdio |
register | restrict | return | short |
signal | wctype | setjmp | string |
signed | sizeof | static | struct |
single | _Alignas | _Alignof | _Atomic |
stdalign | inttypes | stdarg | uchar |
stdint | math | errno | wchar |
stdlib | stdnoreturn | break | fenv |
switch | typedef | typeof | union |
true | false | bool | fortran |
unsigned | while | volatile |
algorithm | cstddef | iostream | sstream |
any | cstdint | istream | stack |
array | cstdio | iterator | static_cast |
atomic | cstdlib | limits | stdexcept |
bitset | cstring | list | streambuf |
cassert | ctgmath | locale | string_view |
catch | ctime | map | strstream |
ccomplex | cuchar | memory | system_error |
cctype | cwchar | memory_resource | template |
cerrno | cwctype | mutable | this |
cfenv | delete | mutex | thread |
cfloat | deque | namespace | throw |
chrono | dynamic_cast | new | try |
cinttypes | exception | numeric | tuple |
ciso646 | execution | operator | typeid |
class | explicit | optional | type_traits |
climits | export | ostream | typeindex |
clocale | filesystem | private | typeinfo |
cmath | foreward_list | protected | typename |
codecvt | friend | public | unordered_map |
complex | fstream | queue | unordered_set |
condition_variable | functional | random | using |
const_cast | future | ratio | utility |
csetjmp | initializer_list | regex | valarray |
csignal | inline | reinterpret_cast | vector |
cstdalign | iomanip | scoped_allocator | virtual |
cstdarg | ios | set | wchar_t |
cstdbool | iosfwd | shared_mutex |
abs | fortran | localZCE | rtNaN |
asm | HAVESTDIO | localZCSV | SeedFileBuffer |
bool | id_t | matrix | SeedFileBufferLen |
boolean_T | int_T | MODEL | single |
byte_T |
int8_T | MT | TID01EQ
|
char_T | int16_T | NCSTATES | time_T |
cint8_T | int32_T | NULL | true |
cint16_T | int64_T | NUMST | TRUE |
cint32_T | INTEGER_CODE | pointer_T | uint_T |
creal_T | LINK_DATA_BUFFER_SIZE | PROFILING_ENABLED
| uint8_T |
creal32_T | LINK_DATA_STREAM | PROFILING_NUM_SAMPLES | uint16_T |
creal64_T | localB | real_T | uint32_T |
cuint8_T | localC | real32_T | uint64_T |
cuint16_T | localDWork | real64_T | UNUSED_PARAMETER |
cuint32_T | localP | RT | USE_RTMODEL
|
ERT | localX | RT_MALLOC
| VCAST_FLUSH_DATA |
false | localXdis | rtInf | vector |
FALSE | localXdot | rtMinusInf |
Некоторые идентификаторы из стандартных библиотек C/C + +, таких как fprintf
, freadf
, и I
также зарезервированы.
Если вы включаете эти имена в код MATLAB в качестве идентификаторов, они переименовываются в сгенерированный код путем предварительной подготовки буквы перед именем. Для примера, asm
можно переименовать в b_asm
.
Этот фрагмент кода использует входную и выходную переменную, которая называется real_T
, которое является зарезервированным ключевым словом для генерации кода.
function real_T = foo(real_T) real_T = real_T + 1; end
В сгенерированном коде переменная real_T
переименован в b_real_T
.
void foo(double *b_real_T) { (*b_real_T)++; }
MATLAB Coder™ резервирует префикс eml
для глобальных функций C/C + + и переменных в сгенерированном коде. Для примера MATLAB для библиотеки во время исполнения генерации кода имен функции начинаться с префикса emlrt
, таких как emlrtCallMATLAB
. Чтобы избежать конфликтов по совпадению имен, не называйте функции C/C + + или первичные функции MATLAB с префиксом eml
.
Список зарезервированных ключевых слов библиотеки замещения кода (CRL) для среды разработки варьируется в зависимости от того, какие CRL зарегистрированы в настоящее время. За пределами ANSI по умолчанию®, ISO®, и GNU® CRL, поставляемые с программным обеспечением MATLAB Coder, дополнительные CRL могут быть зарегистрированы и доступны для использования, если вы установили другие продукты, предоставляющие CRL (для примера, целевого продукта), или если вы использовали Embedded Coder® API для создания и регистрации пользовательских CRL.
Чтобы сгенерировать список зарезервированных ключевых слов для CRL, зарегистрированных в настоящее время в вашем окружении, используйте следующую функцию MATLAB:
crl_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers()
Эта функция возвращает массив ячеек из векторов символов, которые содержат ключевые слова CRL. Установка возвращаемого аргумента опциональна.
Примечание
Чтобы перечислить CRL, зарегистрированные в настоящее время в вашем окружении, используйте команду MATLAB crviewer
.
Чтобы сгенерировать список зарезервированных ключевых слов для CRL, которые вы используете для генерации кода, вызовите функцию, передающую имя CRL, как показано в меню Code replacement library на панели Code Generation > Interface диалогового окна Параметры конфигурации. Для примера,
crl_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers('GNU99 (GNU)')
Вот частичный пример выхода функции:
>> crl_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers('GNU99 (GNU)') crl_ids = 'exp10' 'exp10f' 'acosf' 'acoshf' 'asinf' 'asinhf' 'atanf' 'atanhf' ... 'rt_lu_cplx' 'rt_lu_cplx_sgl' 'rt_lu_real' 'rt_lu_real_sgl' 'rt_mod_boolean' 'rt_rem_boolean' 'strcpy' 'utAssert'
Примечание
Некоторые возвращенные ключевые слова появляются с суффиксом $N
, для примера, 'rt_atan2$N'
. $N
расширяется в суффикс _snf
только в том случае, если поддерживаются нефинитные числа. Для примера, 'rt_atan2$N'
представляет 'rt_atan2_snf'
если поддерживаются и 'rt_atan2'
нефинитные числа если нефинитные числа не поддерживаются. В качестве меры предосторожности следует рассматривать обе формы ключевого слова как зарезервированные.