- 论坛徽章:
- 0
|
pmerofc 发表于 2013-01-22 14:01
貌似这种情况标准没说可以也没说不可以
我估计是楼主的编译器太古老了的缘故吧
楼主这种情况仅会发生在C90,C90是有明确规定的:
An address constant is a pointer to an lvalue designating an object of static storage duration,or to a function dehignaror.
指向具有静态存储周期的左值对象的指针才属于地址常量表达式,而C90规定数组的初始化器必须是常量表达式:
6.57 Initialization
All the expression in an initializer for an object that has static storage duration or in an initializer list for an object that has aggregate or union type shall be constant expressions.
所以在C90中(也包括C99和C11),局部数组名都不是常量表达式,所以楼主的代码会出错。
而C99和C11虽然在“局部数组名不是常量表达式”这个问题上与C90相同,但由于不再规定聚集初始化器必须是常量表达式,从而看不到效果而已。
此外,编译器其实也无分新老,最重要的是跟标准的符合程度,只要与标准足够相符,即使实模式下的编译器也有其可用之处。 |
|