我正在浏览http://geeksforgeeks.org/?p=10302上的代码
#include<stdio.h>
int initializer(void)
{
return 50;
}
int main()
{
static int i = initializer();
printf(" value of i = %d", i);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码不会在C中编译,因为静态变量需要在main()启动之前初始化.那样就好.但是这段代码在C++编译器中编译得很好.
我的问题是,当静态在两种语言中具有相同的用法时,为什么它在C++编译器中编译.当然编译器对于这些语言会有所不同,但我无法确定原因.如果在标准中指定,我很想知道.
我在SO上搜索了这个问题,找到了3个类似的链接但是徒劳无功. Link1 Link2 Link3
谢谢你的帮助.
6.7.8/4 [C99]
具有静态存储持续时间的对象的初始化程序中的所有表达式应为常量表达式或字符串文字.
在static int i = initializer();
RHS中不是常量表达式,因此代码不能在C中编译.
在C++中没有这样的限制,代码在C++中是格式良好的.
归档时间: |
|
查看次数: |
4194 次 |
最近记录: |