Генератор кода резервирует использование определенных идентификаторов в сгенерированном коде. Эти идентификаторы включают 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) для вашей среды разработки варьируется, в зависимости от которого в настоящее время указаны CRLs. Вне ANSI® по умолчанию ISO® и GNU® CRLs предоставили программное обеспечение MATLAB Coder, дополнительная сила CRLs быть указанными и доступные для использования, если вы установили другие продукты, которые обеспечивают CRLs (например, целевой продукт), или если вы использовали Embedded Coder® APIs, чтобы создать и указать пользовательский CRLs.
Чтобы сгенерировать список зарезервированных слов для CRLs, в настоящее время указанного в вашей среде, используйте следующую функцию MATLAB:
crl_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers()
Эта функция возвращает массив ячеек из символьных векторов, которые содержат ключевые слова CRL. Определение возвращаемого аргумента является дополнительным.
Примечание
Чтобы перечислить CRLs, в настоящее время указанный в вашей среде, используйте команду 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'
если неличные числа не поддерживаются. Предусмотрительно, необходимо обработать обе формы ключевого слова, как зарезервировано.