版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yihongxiaoxiang/article/details/50345513

warning: missing braces around initializer
警告的意思是初始化缺少了大括号,也就是没有用大括号明确的区分出初始化数据的归类。

那什么时候会使用到大括号初始化呢?一般情况下初始化使用到大括号的情况是初始化结构体struct或者数组时。

首先说明一下多维数组和结构体的初始化,下面以二维数组的初始化为例(使用默认值为0):

1、分行初始化:int  a[2][3] = {{1,2,3},{4,5,6}}

在{ }内部再用{ }把各行分开,第一对{ }中的初值1,2,3是0行的3个元素的初值。第二对{ }中的初值4,5,6是1行的3个元素的初值。初始化的结果是:

a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

2、不分行以一个大括号初始化: int a[2][3]={ 1,2,3,4,5,6}

这种初始化时会将{ }中的数据依次赋给a数组各元素(按行赋值)。初始化的结果是:

a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

3、对部分元素初始化:这里分为两种情况:

a)、使用花括号的分行部分初始化:int a[2 ][3]={{1,2},{4}};这时的初始化结果就是a[0][0]=1;a[0][1]=2;a[0][2]=0;a[1][0]=4;a[1][1]=0;a[1][2]=0;

b)、只使用一个大括号进行部分初始化:int a[2][3] = {1,2,3,5},这时的初始化结果就是a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=5;a[1][1]=0;a[1][2]=0;

下面说明一下结构体的初始化:

结构体的初始化方式和数组的初始化很类似。一个位于一对大括号内部、由逗号分隔的初始化值列表可用于结构体各成员的初始化。这些值根据结构成员列表的顺序写出。如果初始化列表的值不够,剩余的结构成员将使用默认的值进行初始化。

那这样下来,怎么会出现warning呢?

我们先来回顾一下结构体的定义:结构体时一种将不同类型的数据组合成一个有机整体的聚合数据类型。那么如果结构体中的成员的类型是数组或者结构体时呢?那么这个时候你再仅仅只是用一个大括号来对结构体进行初始化时,就会出现定义不明确的问题了,此外如果对一个多维数组你也只使用一个大括号来进行初始化时,同样也会出现定义不明确的问题。虽说一般编译器会自动将结构中的值按空间顺序依次进行赋值,但是编译器依旧会报一个warning,当然前提是你已经设置了-Wall或者-Wmissing-braces。例如:

struct point

{

​int      x;

​int      y;

};

struct line {

​struct point start;

​struct point end;

};

typedef struct line line;

int main()

{

​int      array1[2][2]     = {11, 12, 13, 14};

​int      array2[2][2]     = {{11, 12}, {13, 14}}; // ok
    ​line     l1               = {1, 1, 2, 2};

​line     l2               = {{2, 2}, {3, 3}}; // ok

​return 0;

}

gcc -Wmissing-braces test_missing_braces.c test_missing_braces.c: In function `main':

test_missing_braces.c:19: warning: missing braces around initializer

test_missing_braces.c:19: warning: (near initialization for `array1[0]')

test_missing_braces.c:21: warning: missing braces around initializer

test_missing_braces.c:21: warning: (near initialization for `l1.start')

这里19行出现warning的原因是仅使用了一个大括号来进行初始化,这时编译器会通过自动分行来对每一个元素进行初始化,同理,第21行也是同样的原因。其修正结果分贝为20和22行。

那既然可以自动赋值为什么还报warning呢?这是因为,有时候我们想要的赋值并不是依次赋值的,例如我想array1[1][0]不赋值而array[1][1]=14,如果只使用大括号的情况是:array1[2][2]     = {11, 12, 14},结果是array1[1][0]=14,而array1[1][1]=0,这样的结果并不是编程者需要的,所以编译器需要提示你检查对应的地方是否是你需要的或者你需要规范一下代码,来避免这种隐藏的问题或者错误。

————————————————
版权声明:本文为CSDN博主「怡红潇湘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yihongxiaoxiang/article/details/50345513

C语言告警warning: missing braces around initializer详解相关推荐

  1. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  2. c语言实现顺序表源程序,C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. ...

  3. c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习

    C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...

  4. C语言结构体中定义函数指针详解

    C语言结构体中定义函数指针详解 结构体指针函数应用场景之一--驱动程序编写 结构体的一些基本用法 形式1:先定义结构体类型,再定义变量 形式2:在定义类型的同时定义变量 形式3:直接定义变量,用无名结 ...

  5. go语言字符串换行_Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...

  6. java jstack使用_JAVA语言之JVM 中jstack命令使用详解

    本文主要向大家介绍了JAVA语言之JVM 中jstack命令使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java程序问题定位时线程栈信息是一个重要线索,如下: " ...

  7. C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt

    c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...

  8. c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  9. python r语言 结合 部署_(转)python中调用R语言通过rpy2 进行交互安装配置详解...

    python中调用R语言通过rpy2 进行详解 1.R语言的安装: 大家进行R语言的安装,在安装好R后,需要配置环境变量R才能进行使用. 对此电脑右键->选择高级设置->环境变量-> ...

最新文章

  1. 波士顿动力新年视频第一发,机器人狗能为朋友开门了!
  2. SqlServer性能检测和优化工具使用详细
  3. Ubuntu 开机自动挂载硬盘
  4. 从阿里核心场景看实时数仓的发展趋势
  5. 【Python-3.3】函数中的可变参数和关键字参数
  6. jquery淡入淡出效果及突出显示案例
  7. 数字电路实验四选一数据选择器行为级模型
  8. dd命令测试硬盘读写速度
  9. 25个常用Matplotlib图的Python代码
  10. 【程序人生】我的程序人生,与互联网13年的际遇
  11. 115CSS3+JS:胶卷式放映
  12. 我被一只老鼠的吱吱声吵醒了
  13. python笔记27:数据分析之交叉分析
  14. 计算机桌面设置怎么还原,怎么把电脑桌面还原
  15. 不会用修图工具没关系,Excel也能轻松更换照片底色
  16. PHICH介绍(2)
  17. 贝索斯的蓝色起源完成第五次太空旅游,将 6 人送入亚轨道飞行;三星英特尔频出招追赶台积电;
  18. 他们怎样读书和选书(汇总篇)
  19. 思科isis路由的优先级_ISIS路由基本配置实验
  20. Android S内置APK时AndroidManifest使用uses-library编译报错

热门文章

  1. 快速获取Android应用包名和Activity名
  2. Js选择框脚本 移动操作select 标签中的 option 项的操作事项
  3. VS Web.config 密码加密加密
  4. [原]Oracle数据文件损坏的模拟和修复(一) |ORA-01578 data block corrupted|
  5. iphone屏蔽系统更新_iPhone 屏蔽系统更新教程,支持 iOS13 / iOS12 系统
  6. 计算碳原子系综的能级C
  7. 8. An Introduction to MCMC for Machine Learning (1)
  8. cmd安装pip_离线情况下怎么安装numpy、pandas和matplotlib?一步一步教你
  9. 类和对象—对象特性—const修饰成员函数
  10. 如何开发一个能拯救银河系的充电器