主要内容

更改用于代码生成的语言标准

C/C++ 语言标准是一组定义 C/C++ 语法、库和功能的规则和规范。遵循这些标准生成的 C/C++ 代码可以在不同的平台和编译器上以一致的方式工作。您可以通过指定目标语言标准生成与各种语言标准兼容的代码。但是,要强制采用指定的语言标准,您必须手动配置编译器标志。

生成与指定的语言标准兼容的代码

默认情况下,代码生成器根据您在生成代码时指定的目标语言选择语言标准。要更改目标语言,请使用以下方法之一:

  • 在工具条的 MATLAB® Coder™ 选项卡上,点击语言按钮并选择输出语言。

  • 在代码配置对象中,设置 TargetLang 属性。

  • 在“代码配置设置”对话框中,设置语言参数。

如果目标语言是 C,则默认语言标准为 C99 (ISO)。如果目标语言是 C++,则默认语言标准为 C++11 (ISO)。要指定默认标准以外的语言标准,请使用语言标准参数。

下表显示可用于代码生成的目标语言和语言标准的组合。验证您的编译器是否支持您指定的语言标准。如果您的编译器不支持您指定的语言标准,则可能会发生编译器错误。

目标语言目标语言标准代码生成器使用的语言标准
C、C++C89/C90 (ANSI)ISO®/IEC 9899:1990
C、C++C99 (ISO)ISO/IEC 9899:1999
C++C++03 (ISO)ISO/IEC 14882:2003
C++C++11 (ISO)ISO/IEC 14882:2011(E)
C++C++14 (ISO)ISO/IEC 14882:2014
C++C++17 (ISO)ISO/IEC 14882:2017
C++C++20 (ISO)ISO/IEC 14882:2020

如果目标语言是 C++ 并且您选择了 C 语言标准,代码生成器将使用所选 C 标准中可用的 C 数学库和 C++03 语言功能。

如果您生成 C 代码并选择 C99 (ISO) 语言标准,代码生成器可以在生成的代码中使用在 C89/C90 (ANSI) 语言标准中不可用的 C 语言功能,包括:

  • 变量作用域

  • INFINITYNAN

  • isinfisnan 函数

  • 布尔字面值

如果您生成 C++ 代码并选择比 C++03 (ISO) 更新的语言标准,代码生成器可以在生成的代码中使用在 C++03 (ISO) 语言标准中不可用的 C++ 语言功能,包括:

  • 枚举类

  • 显式默认的特殊成员函数

  • 使用 {} 的统一初始化语法

强制采用指定的语言标准

当您指定目标语言标准时,代码生成器会生成与该标准兼容的代码。代码生成器不会强制采用选定的语言标准。要强制采用语言标准,您必须在编译设置中手动指定编译器标志。例如,下表显示 GCC 编译器 8.x 版本的编译器标志,这些标志强制采用 MATLAB Coder 软件支持的语言标准。

语言标准编译器标志
C89/C90 (ANSI)-ansi -pedantic -Wno-long-long
C99 (ISO)-std=c99 -pedantic
C++03 (ISO)-std=c++03 -pedantic
C++11 (ISO)-std=c++11 -pedantic
C++14 (ISO)-std=c++14 -pedantic
C++17 (ISO)-std=c++17 -pedantic
C++20 (ISO)-std=c++20 -pedantic

要将编译器标志添加到编译信息对象中,请使用以下方法之一:

  • 在“代码配置设置”对话框中,将编译配置参数设置为 Specify。如果您未指定工具链,App 将定位一个工具链并填充工具链参数。点击显示设置以打开编译配置设置,并将编译器标志添加到 C 编译器C++ 编译器文本框中。

  • 在命令行中,创建一个 coder.CodeConfigcoder.EmbeddedCodeConfig 对象。将 BuildConfiguration 属性设置为 'Specify'。如果您未指定工具链,App 将定位一个工具链并设置 Toolchain 属性。修改 CustomToolchainOptions 属性以包含编译器标志。请参阅Custom Toolchain Registration

  • 在您的 MATLAB 代码中,调用具有名称-值参量 "addCompileFlags"coder.updateBuildInfo 函数,或使用其他方法自定义代码生成后的编译过程。请参阅Build Process Customization

另请参阅

| |

主题