这是因为 C++ 不进行边界检查。像 Java 和 Python 这样的语言具有边界检查功能,因此如果您尝试访问越界元素,它们会抛出错误。C++ 的设计原则是它不应该比等效的 C 代码慢,而 C 不进行数组边界检查。因此,如果您尝试访问此越界内存,则程序的行为是未定义的,因为这是在 C++ 标准中写明的。通常,每当您遇到未定义的行为时,任何事情都可能发生。应用程序可能会崩溃,可能会冻结,可能会…… 阅读更多
在声明在 C 中实现/编译的函数时,需要在 C++ 中使用 extern "C"。使用 extern "C" 让编译器知道我们想要使用 C 命名和调用约定。这会导致编译器在我们的 C++ 代码中进入 C 模式。这是必要的,因为 C++ 编译器在其符号表中混淆名称的方式与 C 编译器不同,因此行为也与 C 编译器不同。