在这段代码中(整个文件只包含一行(:
char buffer[256] = { 0 };
与Splint核实后,我得到了以下提示:
foo.c(1,20): Initializer block for buffer has 1 element, but declared as char
[256]: 0
Initializer does not define all elements of a declared array. (Use
-initallelements to inhibit warning)
Initializer未定义已声明数组的所有元素这很令人费解:我读到了一些SO的答案,但它们都声称{ 0 }
确实将所有元素初始化为零。
拆分版本:
Splint 3.1.1 --- 12 April 2003
Maintainer: splint-bug@splint.org
Compiled using Microsoft Visual C++ 6.0
从Splint.org下载。
是的,它将所有元素归零。一般规则是,如果提供的初始值设定项少于元素,则剩余元素为零。(因此,例如char buffer[256] = {1};
将仅将第一个元素设置为1
,而将其余元素设置为0
。(
警告并没有说剩余的元素未初始化,而是说您没有为它们提供初始化程序。在这种特定情况下,此警告没有意义(= {0}
是使数组归零的常见模式(,但通常它可能很有用(例如,它会警告int arr[4] = {1,2,3};
(。
对于这样的char数组,最常见(也是最安全(的方法似乎是:
char buffer[256] = "";
它可以像其他结构类型一样使用空{}进行初始化:
char buffer[256] = {}; // not working in C, only work for C++
使用{0}
似乎更像是初始化结构类型的C++方式。