保留关键字
生成器关键字保留供内部使用。不要在模型中将它们用作标识符或函数名称。还应避免在模型中使用 C 保留关键字作为标识符或函数名称。如果模型包含保留关键字,代码生成器在生成代码中的标识符时会尝试替换这些关键字。如果代码生成器无法替换保留关键字,则生成的代码会将保留关键字用作标识符,这可能会导致无法编译。为避免生成与模型中的标识符不匹配的标识符,请不要使用保留关键字作为标识符。
C 保留关键字
以下是 C 语言指定的保留关键字。代码生成器会尝试重命名与这些关键字匹配的标识符。
auto | double | int | struct |
break | else | long | switch |
case | enum | register | typedef |
char | extern | return | union |
const | float | short | unsigned |
continue | for | signed | void |
default | goto | sizeof | volatile |
do | if | static | while |
C++ 保留关键字
以下是 C++ 语言在 C 保留关键字之外指定的保留关键字。如果生成 C++ 代码,代码生成器会尝试重命名与这些关键字匹配的标识符。
bool | false | protected | try |
catch | friend | public | typeid |
class | inline | reinterpret_cast | typename |
const_cast | mutable | static_cast | using |
delete | namespace | template | virtual |
dynamic_cast | new | this | wchar_t |
explicit | operator | throw | |
export | private | true |
其他常见保留关键字
代码生成器会尝试替换一些不属于 C 或 C++ 语言设定的关键字。请参阅下表中这些关键字的部分示例。
abs | int8_T | MAX_int64_T | RT |
array | int16_T | MAX_uint8_T * | RT_MALLOC |
asm | int32_T | MAX_uint16_T * | rtInf |
boolean_T | int64_T | MAX_uint32_T * | rtMinusInf |
byte_T | INTEGER_CODE | MAX_uint64_T | rtNaN |
char_T | LINK_DATA_BUFFER_SIZE | MIN_int8_T * | SeedFileBuffer |
cint8_T | LINK_DATA_STREAM | MIN_int16_T * | SeedFileBufferLen |
cint16_T | localB | MIN_int32_T * | single |
cint32_T | localC | MIN_int64_T | TID01EQ |
creal_T | localDWork | MODEL | time_T |
creal32_T | localP | MT | tm |
creal64_T | localX | NCSTATES | uint_T |
cuint8_T | localXdis | NULL | uint8_T |
cuint16_T | localXdot | NUMST | uint16_T |
cuint32_T | localZCE | pointer_T | uint32_T |
ERT | localZCSV | PROFILING_ENABLED | uint64_T |
fortran | matrix | PROFILING_NUM_SAMPLES | UNUSED_PARAMETER |
HAVESTDIO | MAX_int8_T * | real_T | USE_RTMODEL |
id_t | MAX_int16_T * | real32_T | VCAST_FLUSH_DATA |
int_T | MAX_int32_T * | real64_T | vector |
*如果指定替换标识符,则不保留。 |
代码生成代码替换库关键字
开发环境的代码替换库保留关键字列表因注册的库而异。可用代码替换库的列表因其他安装的产品(例如目标产品)而异,或取决于您是否使用 Embedded Coder® 创建并注册自定义代码替换库。
要生成目前已在您的环境中注册的库的保留关键字列表,请使用以下 MATLAB® 函数:
lib_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers()
此函数返回库关键字数组。指定输入参量的操作是可选的。
注意
要列出目前已在您的环境中注册的库,请使用 MATLAB 命令 crviewer
。
要为用于生成代码的特定库生成保留关键字列表,请调用该函数并传递该库的名称,该库名称显示在“配置参数”对话框的代码生成 > 接口窗格的代码替换库菜单中。例如,
lib_ids = RTW.TargetRegistry.getInstance.getTflReservedIdentifiers('GNU C99 extensions')
以下是函数输出的部分示例:
>> lib_ids = ... RTW.TargetRegistry.getInstance.getTflReservedIdentifiers('GNU C99 extensions') lib_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'
(如果不支持非有限数)。作为预防措施,您应将这两种形式的关键字都视为保留关键字。
指定自定义保留关键字
除了代码生成器保留的关键字外,您还可以指定一组自定义保留关键字。指定自定义保留关键字,以在 Simulink® 模型中无法识别来自外部环境的函数和变量时方便代码集成。
要创建一个保留名称列表,请打开“配置参数”对话框。在代码生成 > 标识符窗格中,在Reserved names字段中输入关键字。
如果模型包含 MATLAB Function 或 Stateflow® 模块,并且您在代码生成 > 标识符窗格上选择使用与仿真目标相同的保留名称,则代码生成过程将使用为这些模块指定的保留名称。
以编程方式检查保留关键字
由于保留关键字列表庞大并且会动态变化,本文档无法将其全部列出。要以编程方式检索代码生成器尝试替换的关键字列表,请从 MATLAB 命令行窗口运行以下命令:
RTW.reservedIdentifiers()
RTW.reservedIdentifiers
。如果您有 Simulink Check™ 许可证,可以使用Check model object names (Simulink Check)检查来验证以确保模型未使用保留名称。