user-0 提问: 请问这样对结构体初始化为什么会出错？

回复:
user: user-1
content: 引用 6 楼 均陵鼠侠的回复:[quote=引用 5 楼 ZhangBoyue 的回复:] [quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 ZhangBoyue 的回复:] 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。[/quote] g++  4.4.5 20110214 (Red Hat 4.4.5-6) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 不算旧啊，可能是和微软诀别时间长了？　 [/quote]  微软的编译器对C的支持就不要提了。 现在的GCC版本是5.2.1。 我现在用台式机，只有笔记本上有Linux和gcc 只好用MinGW，而且特别旧，将就看吧：  [/quote] 弱弱的问一句，你的代码中为什么没有("%s",t.t),也能打印出字符串，是c99,的特性吗

user: user-2
content: 引用 10 楼 ZhangBoyue 的回复:[quote=引用 8 楼 sholber 的回复:] N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x  6.7.9 Initialization Syntax  initializer:           assignment-expression           { initializer-list }           { initializer-list , }      initializer-list:           designationopt initializer           initializer-list , designationopt initializer      designation:           designator-list =      designator-list:           designator           designator-list designator      designator:           [ constant-expression ]           . identifier 学习了，多谢。  另：楼主的程序里把常量字符串赋给数组的做法，虽然能通过编译、能得到预期行为、且没有内存泄露，但是是有问题的。[/quote]  有什么问题？

user: user-3
content: lz又来问, 不是说VS2015支持么, 这是C标准, 不是C++标准

user: user-4
content: 引用 8 楼 sholber 的回复:N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x  6.7.9 Initialization Syntax  initializer:           assignment-expression           { initializer-list }           { initializer-list , }      initializer-list:           designationopt initializer           initializer-list , designationopt initializer      designation:           designator-list =      designator-list:           designator           designator-list designator      designator:           [ constant-expression ]           . identifier 学习了，多谢。  另：楼主的程序里把常量字符串赋给数组的做法，虽然能通过编译、能得到预期行为、且没有内存泄露，但是是有问题的。

user: user-4
content: 引用 6 楼 sholber 的回复:[quote=引用 5 楼 ZhangBoyue 的回复:] [quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 ZhangBoyue 的回复:] 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。[/quote] g++  4.4.5 20110214 (Red Hat 4.4.5-6) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 不算旧啊，可能是和微软诀别时间长了？　 [/quote]  微软的编译器对C的支持就不要提了。 现在的GCC版本是5.2.1。 我现在用台式机，只有笔记本上有Linux和gcc 只好用MinGW，而且特别旧，将就看吧：  [/quote]  不好意思，您上条回复没有及时看见。第一次看见这么写，感觉好华丽的样子。

user: user-2
content: N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x  6.7.9 Initialization Syntax  initializer:           assignment-expression           { initializer-list }           { initializer-list , }      initializer-list:           designationopt initializer           initializer-list , designationopt initializer      designation:           designator-list =      designator-list:           designator           designator-list designator      designator:           [ constant-expression ]           . identifier

user: user-4
content: 引用 4 楼 sholber 的回复:[quote=引用 3 楼 ZhangBoyue 的回复:] 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。[/quote]  什么叫指示器？这是标准的语法还是微软自己的feature ？愿闻其详。

user: user-2
content: 引用 5 楼 ZhangBoyue 的回复:[quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 ZhangBoyue 的回复:] 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。[/quote] g++  4.4.5 20110214 (Red Hat 4.4.5-6) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 不算旧啊，可能是和微软诀别时间长了？　 [/quote]  微软的编译器对C的支持就不要提了。 现在的GCC版本是5.2.1。 我现在用台式机，只有笔记本上有Linux和gcc 只好用MinGW，而且特别旧，将就看吧：

user: user-4
content: 引用 4 楼 sholber 的回复:[quote=引用 3 楼 ZhangBoyue 的回复:] 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。[/quote] g++  4.4.5 20110214 (Red Hat 4.4.5-6) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 不算旧啊，可能是和微软诀别时间长了？

user: user-2
content: 引用 3 楼 ZhangBoyue 的回复:编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？　  囧……还是你自己好好读读语法吧。 从C99开始，可以使用指示器 .name = "hello"，这没有问题。 只是楼主的编译器太旧罢了。

user: user-4
content: 编译器不是已经说了吗？语法不正确。 １，　struct all a = { .name = "helo" } 中，成员操作符　＂．＂ ２，　还是这一句，花括号对立面为什么写　name="hello" 呢？　按照c++的语法规则，这里的name 只能去两个地方找声明，花括号内和全局作用域。显然都是找不到的。　  再细细读读基本语法吧。  既然楼主问的是，错在哪，我就假设你已经知道正确的写法了。其实这条语句与其说是初始化，不如说是赋值。　c++环境的话，初始化最好用构造函数。  还有一个问题，ａ被分配以后，系统申请了10个byte的内存（即a.name )　指向的内存，楼主研究一下你把常量字符串的地址赋给a.name以后，这些内存怎么办　？

user: user-0
content: 那VS2015支持C99吗？

user: user-5
content: 需要支持c99