主要内容

保留关键字

生成器关键字保留供内部使用。不要在模型中将它们用作标识符或函数名称。还应避免在模型中使用 C 保留关键字作为标识符或函数名称。如果模型包含保留关键字,代码生成器在生成代码中的标识符时会尝试替换这些关键字。如果代码生成器无法替换保留关键字,则生成的代码会将保留关键字用作标识符,这可能会导致无法编译。为避免生成与模型中的标识符不匹配的标识符,请不要使用保留关键字作为标识符。

C 保留关键字

以下是 C 语言指定的保留关键字。代码生成器会尝试重命名与这些关键字匹配的标识符。

autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
constfloatshortunsigned
continueforsignedvoid
defaultgotosizeofvolatile
doifstaticwhile

C++ 保留关键字

以下是 C++ 语言在 C 保留关键字之外指定的保留关键字。如果生成 C++ 代码,代码生成器会尝试重命名与这些关键字匹配的标识符。

boolfalseprotectedtry
catchfriendpublictypeid
classinlinereinterpret_casttypename
const_castmutablestatic_castusing
deletenamespacetemplatevirtual
dynamic_castnewthiswchar_t
explicitoperatorthrow 
exportprivatetrue 

其他常见保留关键字

代码生成器会尝试替换一些不属于 C 或 C++ 语言设定的关键字。请参阅下表中这些关键字的部分示例。

absint8_TMAX_int64_TRT
arrayint16_TMAX_uint8_T*RT_MALLOC
asmint32_TMAX_uint16_T*rtInf
boolean_Tint64_TMAX_uint32_T*rtMinusInf
byte_TINTEGER_CODEMAX_uint64_TrtNaN
char_TLINK_DATA_BUFFER_SIZEMIN_int8_T*SeedFileBuffer
cint8_TLINK_DATA_STREAMMIN_int16_T*SeedFileBufferLen
cint16_TlocalBMIN_int32_T*single
cint32_TlocalCMIN_int64_TTID01EQ
creal_TlocalDWorkMODELtime_T
creal32_TlocalPMTtm
creal64_TlocalXNCSTATESuint_T
cuint8_TlocalXdisNULLuint8_T
cuint16_TlocalXdotNUMSTuint16_T
cuint32_TlocalZCEpointer_Tuint32_T
ERTlocalZCSVPROFILING_ENABLED uint64_T
fortranmatrixPROFILING_NUM_SAMPLESUNUSED_PARAMETER
HAVESTDIOMAX_int8_T*real_TUSE_RTMODEL
id_tMAX_int16_T*real32_TVCAST_FLUSH_DATA
int_TMAX_int32_T*real64_Tvector
*如果指定替换标识符,则不保留。

代码生成代码替换库关键字

开发环境的代码替换库保留关键字列表因注册的库而异。可用代码替换库的列表因其他安装的产品(例如目标产品)而异,或取决于您是否使用 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)检查来验证以确保模型未使用保留名称。

另请参阅