关于结构体初始化

原创 2013年12月02日 15:47:37

我们一般见的结构体初始化有两种:

typedef struct
{
  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.
                                         This parameter must be set to a value lower than 400kHz */

  uint16_t I2C_Mode;                /*!< Specifies the I2C mode.
                                         This parameter can be a value of @ref I2C_mode */

  uint16_t I2C_DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
                                         This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */

  uint16_t I2C_OwnAddress1;         /*!< Specifies the first device own address.
                                         This parameter can be a 7-bit or 10-bit address. */

  uint16_t I2C_Ack;                 /*!< Enables or disables the acknowledgement.
                                         This parameter can be a value of @ref I2C_acknowledgement */

  uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
                                         This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;

比如这个结构体,我们一般这样初始化:

	I2C_InitTypeDef i2c;
	i2c.I2C_Ack = I2C_Ack_Enable;
	i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	i2c.I2C_ClockSpeed = clock*1000;
	i2c.I2C_DutyCycle = I2C_DutyCycle_2;
	i2c.I2C_Mode = I2C_Mode_I2C;
	i2c.I2C_OwnAddress1 = addr;

	I2C_InitTypeDef i2c = {
                    I2C_Ack_Enable,
                    I2C_AcknowledgedAddress_7bit,
                    clock*1000,
                    I2C_DutyCycle_2,
                    I2C_Mode_I2C,
                    addr};
希望大家不要纠结我这个结构体变量的顺序,肯定错了,我只是说下有这种方法!

但是在linux内核里面有这样一种初始化方法:

	I2C_InitTypeDef i2c = {
	.I2C_Ack = I2C_Ack_Enable ,
	.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit,
	.I2C_ClockSpeed = 40000,
	.I2C_DutyCycle = I2C_DutyCycle_2,
	.I2C_Mode = I2C_Mode_I2C ,
	.I2C_OwnAddress1 = 0x0a
	};
但是在keil里面默认是不可以用这种方法初始化的,他属于C99的标准,但是keil默认是C90的标准!

如果需要这样用的话,或者你拿到的工程代码里面有这样定义的,我们可以这样设置就可以了!

蓝桥杯-嵌入式交流群
 147520657


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++结构体类型的定义和初始化

今天在看《深入浅出MFC》时,看到了一个结构体的问题甚是不解,写法为: Struct MSGMAP_ENTRY _messageEntries[]= {        WM_CREATE,OnCrea...

怎样用函数初始化结构体

问题 这里主要讨论函数的参数,应该是结构体呢,还是结构体的地址,还是二者都行。 实验证明,只能用结构体的地址。 代码 #include #include #include typedef stru...

C++结构体类型的定义和初始化

有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用。这些组合在一个整体中的数据是互相联系的。例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,都是这个学生的属性,见图7.1。 ...

linux内核驱动中 结构体 初始化 逗号问题

在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initialize...

【转载】c语言结构体指针初始化

转载来自:http://www.cnblogs.com/losesea/archive/2012/11/15/2772526.html   微博昵称:losesea 今天来讨论一下C中的内...

结构体定义和初始化

目标:结构体类型,结构体变量,结构体初始化。弄清这3个概念及其间的联系。   结构的定义 定义一个结构的一般形式为: struct 结构名 { 成员表列 } 成员表由若干个成员组成,每...

C99 结构体指定初始化

在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)...

结构体变量的初始化

在看FFMPEG的源码时,进入main()函数的第一句程序就是: 03149 int main(int argc, char **argv) 03150 { 03151 OptionsC...

从Linux的ext2文件系统源码学到一种初始化结构体的新方法

从Linux的ext2文件系统源码学到一种初始化结构体的新方法。在学习Linux(V2.16.12.4)的ext2文件系统代码时,看到一个很特别的代码,如下:

C99结构体指定初始化

在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)