Генератор кода резервирует использование определенных идентификаторов в сгенерированном коде. Эти идентификаторы включают ключевые слова 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 в настоящее время зарегистрированы. Помимо стандартных списков CRL ANSI ®, ISO ® и GNU ®, поставляемых с программным обеспечением MATLAB Coder, дополнительные списки CRL могут быть зарегистрированы и доступны для использования, если установлены другие продукты, предоставляющие CRL (например, целевой продукт), или если вы использовали API Embedded Coder ® для создания и регистрации пользовательских списков CRL.
Чтобы создать список зарезервированных ключевых слов для CRL, зарегистрированных в настоящее время в среде, используйте следующую функцию MATLAB:
crl_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers()
Эта функция возвращает массив ячеек символьных векторов, содержащих ключевые слова CRL. Указание возвращаемого аргумента является необязательным.
Примечание
Для вывода списка CRL, зарегистрированных в настоящее время в среде, используйте команду MATLAB. crviewer.
Чтобы создать список зарезервированных ключевых слов для CRL, который используется для создания кода, вызовите функцию, передающую имя CRL, как показано в меню Библиотека замены кода (Code replacement library) на панели Создание кода (Code Generation) > Интерфейс (Interface) диалогового окна Параметры конфигурации (Configuration Parameters). Например,
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' если не поддерживаются конечные номера. В качестве меры предосторожности следует рассматривать обе формы ключевого слова как зарезервированные.