我可以做结构的初始化代码为:C/C++编程语言的结构体初始化?
但无法:
struct struct_type_id struct_name_id;
struct_name_id = { value1, value2, value3 };
为什么我可以同前做到这一点,但不能与后者用gcc,G ++,VC2008 ,vc6?换句话说,为什么c/C++编程语言不支持这种语法?
感谢。
我可以做结构的初始化代码为:C/C++编程语言的结构体初始化?
但无法:
struct struct_type_id struct_name_id;
struct_name_id = { value1, value2, value3 };
为什么我可以同前做到这一点,但不能与后者用gcc,G ++,VC2008 ,vc6?换句话说,为什么c/C++编程语言不支持这种语法?
感谢。
第一条语句创建初始化为给定值,即,这些值是建立在内存中,并直接存储在该程序的可执行文件的变量变量地址(用于全局变量)或准备好内存拷贝(用于堆栈变量)。
第二个区块的第二个陈述非常不同。虽然看起来相似,但它是一个分配表达式。这意味着等号运算符的RHS是一个被评估的表达式(独立于=中的LHS),然后传递给=运算符。没有适当的上下文,{...}
没有任何意义。
在C99中,你可以这样做:
struct_name_id = (struct struct_type_id){ value1, value2, value3 };
现在的平等经营的RHS是一个有效的表达,因为是编译器知道什么是{...}
适当的范围内。
在C++ 11,语法是:
struct_name_id = struct_type_id{ value1, value2, value3 };
你只需要转换值,例如:
struct_name_id = (struct struct_type_id){ value1, value2, value3 };
我不知道为什么ç没有使用类似的初始化列表最初支持某种语法来“重新初始化”一个结构 - 我肯定有时候会发现它很方便。由于Juliano mentioned,C99(和C++ 0x)已将其固定到一定程度,但我经常不得不坚持使用C90。当我想做那样的事情时,我有时会做以下事情:
struct foo const init_foo = { 1, 2, 3};
struct foo myFoo;
// ....
myFoo = init_foo; // reinitialize myFoo
这个工作适合你吗?
typedef struct name_id {int value1; int value2; int value3;} NAME_ID;
name_id mynameid = {0,1,2};
@FractalSpace:它无法工作。它只是为结构name_id定义一个别名,但不要改变任何其他的东西。 – Jichao 2009-11-10 03:32:58
我面临类似的问题,并且将溶液于是,我试图初始化的功能以外的结构(不使用初始化语法,但与obj.member = VALUE;表示)。这是一个相关的问题,所以张贴在这里,希望有同样问题的人登陆这里。
我在哪里可以了解有关此C/C++编程语言的更多信息?它有一个网页吗? – 2014-05-28 02:33:24