数码资讯
linux内核代码学习体系结构初始化
当我们阅读GNU / Linux的内核代码,我们会遇到一类特殊结构的初始化。这种方法不介绍一些C的教材,如两版本的Tan和的表示这就是所谓的指定初始化两版(指定初始化)。在这里,我们看到这样一个结构工程例:静态结构在linux-2.6. X /司机/ USB /存储/ USB。C初始化usb_dri
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
当我们阅读GNU / Linux的内核代码,我们会遇到一类特殊结构的初始化。这种方法不介绍一些C的教材,如两版本的Tan和的表示这就是所谓的指定初始化两版(指定初始化)。在这里,我们看到这样一个结构工程例:静态结构在linux-2.6. X /司机/ USB /存储/ USB。C初始化usb_driver usb_storage_driver = {。主人= this_module,名称= USB存储,storage_probe。探头=,= storage_disconnect。断开,。id_table = storage_usb_ids,};乍一看,这和我们以往的研究结构初始化远。事实上,这是一个特定的Linux设备驱动程序的应用较早,这源于ISO C99标准。下面我提C Primer Plus第五相关章节的内容,那么我们可以理解,2.6版内核的优势在于它的初始化没有遵循定义的秩序。这带来了很大的灵活性,其更大的好处是可以在自己的应用程序的开发实现了一个结构定义如下:结构本书标题{ } { char maxtitl;焦maxautl作者{ };浮动值;};C99支持结构指定初始化项目,它的语法类似于数组的指定初始化项目。指定初始化项目的结构使用点运算符和成员名称(而不是方括号和指数值)来识别如果特定的元素。例如,只有书的价值结构成员的初始化,你可以这样做:struct书=惊喜。值= { 10.99 };可以以任意顺序使用指定的项目初始化:struct礼品书= {。值= 25.99,。作者=杰姆斯broadfool 此外,一个特定的成员最后的任务是获取价值。例如,考虑下面的语句:struct礼品书= {。值= 18.90,。作者= philionna杵,0.25 },将分配价值0.25会员的价值,因为它体现了作者的结构声明的成员。新价值0.25取代了早期的分配18.90.further信息指定初始化可以称为6.7.8节在C99标准inialization。
特定的初始化
C89标准要求的初始化语句的元素出现在一个固定的顺序,因为是在初始化的数组或结构元素的顺序。在ISO C99,你可以以任何顺序给这些元素,指定下标或其相应的阵列结构的名称,和GNU C也用这个C89模式的延伸。这种延伸是在GNU C++实现。为了指定数组下标,写在前面的元素的值{ } =;指标;例如,int { 6 } = { { 4 } = 29 = 15 },{ 2 };
它等效于:int { 6 } { 0, 0, 15,0, 29, 0 };
下标的值必须是常量表达式,即使初始化的数组是自动的。另一个语法是写{ }指标。,,=在元素的值的前面,但它不再是使用GCC 2.5,但GCC仍然接受它。为了初始化一系列的元素相同的值,它是用{第一…最后} = value这是一个GNU扩展。例如,int宽度{ } = { { 0…9 } = 1,{ 10…99 } = 2,{ 100 } = 3 };
如果在价值有一个副作用,副作用只会发生一次,而不是每一个初始化的范围内。注意,数组的长度最大值加上一个指定的值。在结构,初始化语句中使用=;。中的元素值的前面;指定要初始化该成员的名称。例如,给定下面的结构,结构点{ int x,y;};
和下面的初始化,结构点P = {。Y = yvalue,X = xvalue };
它相当于:结构点P = { { xvalue,yvalue };
另一种语法意义相同的字段:。,但它已经从GCC 2.5废除,如下所示:结构点P = { Y:yvalue,X:xvalue }。
{指数} 或Fieldname这是一个指标。在初始化一个社区,你也可以用一个指标(或不再使用冒号语法)来指定元素的社区应该使用。例如,联盟富{ int i;双D;};联盟Foo f = { { 4 }。a;
二元将用于转换4为双类型可以存储在社区。相反,转换4为联盟Foo类型将把它作为一个整数,我走进社区,因为它是一个整数。(参见5.24部分的群落类型。你可以结合技术这一命名的元素与普通的C初始化一个连续单元。每个元素没有初始化一个指标应用于下一个连续的元素在数组或结构,例如,int { 6 } = { { 1 } = V1,V2,V4 } { 4 } =;
它相当于一个int { 6 } = { { { 0,V1,V2,V4,0,0 };
当下标是一个字符或属于枚举类型,它是确定数组元素的初始化语句特别有用。例如:int空白{ 256 } = { {} = 1,{不} { } = 1,H = 1,F = 1 } { n = 1,{ },{ 1 } } = R;
你也可以写一个系列的Fieldname和{ }指标;指标指定初始化嵌套的子对象;= 这个列表是一个孩子的对象,与最近的支架相一致。例如,采用上述结构点声明:点的结构ptarray { 10 } = { { 2 }。Y = YV2,{ 2 }。x = 2,{ 0 }。x = xv0 };
如果同一成员多次初始化,将从最后一次初始化中得到值。如果任何此类覆盖初始化副作用,则不会指定副作用。目前,GCC将放弃它们并生成警告。
特定的初始化
C89标准要求的初始化语句的元素出现在一个固定的顺序,因为是在初始化的数组或结构元素的顺序。在ISO C99,你可以以任何顺序给这些元素,指定下标或其相应的阵列结构的名称,和GNU C也用这个C89模式的延伸。这种延伸是在GNU C++实现。为了指定数组下标,写在前面的元素的值{ } =;指标;例如,int { 6 } = { { 4 } = 29 = 15 },{ 2 };
它等效于:int { 6 } { 0, 0, 15,0, 29, 0 };
下标的值必须是常量表达式,即使初始化的数组是自动的。另一个语法是写{ }指标。,,=在元素的值的前面,但它不再是使用GCC 2.5,但GCC仍然接受它。为了初始化一系列的元素相同的值,它是用{第一…最后} = value这是一个GNU扩展。例如,int宽度{ } = { { 0…9 } = 1,{ 10…99 } = 2,{ 100 } = 3 };
如果在价值有一个副作用,副作用只会发生一次,而不是每一个初始化的范围内。注意,数组的长度最大值加上一个指定的值。在结构,初始化语句中使用=;。中的元素值的前面;指定要初始化该成员的名称。例如,给定下面的结构,结构点{ int x,y;};
和下面的初始化,结构点P = {。Y = yvalue,X = xvalue };
它相当于:结构点P = { { xvalue,yvalue };
另一种语法意义相同的字段:。,但它已经从GCC 2.5废除,如下所示:结构点P = { Y:yvalue,X:xvalue }。
{指数} 或Fieldname这是一个指标。在初始化一个社区,你也可以用一个指标(或不再使用冒号语法)来指定元素的社区应该使用。例如,联盟富{ int i;双D;};联盟Foo f = { { 4 }。a;
二元将用于转换4为双类型可以存储在社区。相反,转换4为联盟Foo类型将把它作为一个整数,我走进社区,因为它是一个整数。(参见5.24部分的群落类型。你可以结合技术这一命名的元素与普通的C初始化一个连续单元。每个元素没有初始化一个指标应用于下一个连续的元素在数组或结构,例如,int { 6 } = { { 1 } = V1,V2,V4 } { 4 } =;
它相当于一个int { 6 } = { { { 0,V1,V2,V4,0,0 };
当下标是一个字符或属于枚举类型,它是确定数组元素的初始化语句特别有用。例如:int空白{ 256 } = { {} = 1,{不} { } = 1,H = 1,F = 1 } { n = 1,{ },{ 1 } } = R;
你也可以写一个系列的Fieldname和{ }指标;指标指定初始化嵌套的子对象;= 这个列表是一个孩子的对象,与最近的支架相一致。例如,采用上述结构点声明:点的结构ptarray { 10 } = { { 2 }。Y = YV2,{ 2 }。x = 2,{ 0 }。x = xv0 };
如果同一成员多次初始化,将从最后一次初始化中得到值。如果任何此类覆盖初始化副作用,则不会指定副作用。目前,GCC将放弃它们并生成警告。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。