MicroVision 5.13 和 ARMCC 5.05 上的 C++11

标签 c++ c++11 arm keil armcc

我有一个适用于 STM32F407 处理器的 uVision 5.13 项目,我也在使用 RTX 操作系统,我正在尝试使用一些 C++11 功能,例如作用域枚举,但是当我放置 --cpp11 编译器选项时我从其中一个 cmsis header 收到此错误:

compiling RTX_Conf_CM.c...
C:\Keil\ARM\PACK\ARM\CMSIS\4.2.0\CMSIS_RTX\INC\RTX_CM_lib.h(250): error: #390: function "main" may not be called or have its address taken osThreadDef_t os_thread_def_main = {(os_pthread)main, osPriorityNormal, 1, 4*OS_MAINSTKSIZE };
RTE\CMSIS\RTX_Conf_CM.c: 0 warnings, 1 error**

那是在没有 --cpp11 选项的情况下编译工作正常的相同源代码。

然后,如果我像这样添加受支持的 C++11 功能之一:

namespace TestNamespace
{

enum class Test : std::int16_t
{
  TestValue1 = 0
};

class TestClass
{

//All the class code here

};
}

然后每次编译包含作用域枚举的头文件时,我开始从 Windows 收到消息“ARM C/C++ 编译器已停止工作”。这是 Windows 中的问题签名:

Problem Event Name: APPCRASH
Application Name: ArmCC.exe
Application Version: 5.5.0.106
Application Timestamp: 547650a9
Fault Module Name: ArmCC.exe
Fault Module Version: 5.5.0.106
Fault Module Timestamp: 547650a9
Exception Code: c0000005
Exception Offset: 003f566a
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

所以,我做错了什么或者那些是 ARMCC 错误??

我的 uVision 版本是 5.13,编译器版本是 5.05 update 1 build 106。

最佳答案

第一个错误是绝对正确的,即使在 C++98 中也禁止这种做法。

然而,无论您的代码如何,编译器崩溃都是一个 ARMCC 错误。即使您尝试编译 .mp3 文件,它也不会崩溃。

关于MicroVision 5.13 和 ARMCC 5.05 上的 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803606/

相关文章:

c# - 在 .NET 中,如何识别 C++ DLL 是在 DEBUG 还是 RELEASE 版本中?

c++ - std::bind 在作为右值引用传递时丢失引用

c++ - std::list remove_if 删除节点?

assembly - ARM 组装难题

c++ - Visual Studio 2010 : C++: Error LNK2001: unresolved external symbol

c++ - 在 C++ 中重载 << 运算符?

c++ - 为什么数组类型不会衰减为类模板的指针?

c++ - 检查成员是否存在并调用它或什么也不做

android - SQLcipher(不同版本)在一个平台上工作,但在另一个平台上崩溃

macros - 我可以使用什么预定义宏来检测 Clang 中的目标架构?