c++ - array[100] = {0} 如何将整个数组设置为 0?

标签 c++ c compiler-construction

编译器如何填充char array[100] = {0};中的值?它背后的魔力是什么?

我想知道编译器内部是如何初始化的。

最佳答案

这不是魔法。

此代码在 C 中的行为在 C 规范 (online draft of C spec) 的第 6.7.8.21 节中进行了描述:对于没有指定值的元素,编译器将指针初始化为 NULL 并将算术类型初始化为零(并递归地将其应用于聚合)。

此代码在 C++ 中的行为在 C++ 规范 (online draft of C++ spec) 的第 8.5.1.7 节中进行了描述:编译器聚合初始化没有指定值的元素。

另外,请注意,在 C++(但不是 C)中,您可以使用空的初始化列表,导致编译器聚合初始化数组的所有元素:

char array[100] = {};

至于当你这样做时编译器可能会生成什么样的代码,看看这个问题:Strange assembly from array 0-initialization

关于c++ - array[100] = {0} 如何将整个数组设置为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629017/

相关文章:

c# - C# 编译器如何区分抽象方法的具体子类实现和抽象基类中的重载?

c++ - g++ 不产生调试符号

php - 如何解决这个重名错误?

c++ - 下采样图像

iPhone 开发 - 编译器警告!

objective-c - 使用 Clang (Ubuntu) 编译 Objective C 时的问题

c++ - 未插入 Windows API 组合框数据

c++ - 如何访问 luaL_loadbuffer 名称参数?

c++ - 如何捕捉这个错误? [C++]

将 2 个字节转换为整数