编译代码1给出错误' i redefined',但代码2显示没有类似的错误.为什么会这样?
static int i; //Declaring the variable i.
static int i=25; //Initializing the variable.
static int i; //Again declaring the variable i.
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int i; //Declaring the variable i.
int i=25; //Initializing the variable.
int i; //Again declaring the variable i.
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 10
两者都应该编译.
这两个int i;和static int i;是试探性的定义,用C,因为他们没有一个初始化并没有extern.只要定义在类型或链接中不冲突,就可以为翻译单元中的任何对象提供多个临时声明和最多一个非暂定定义.
ISO/IEC 9899:1999 6.9.2:
具有没有初始化程序的文件范围且没有存储类说明符或存储类说明符的对象的标识符声明
static构成暂定定义.如果翻译单元包含一个或多个标识符的暂定定义,并且翻译单元不包含该标识符的外部定义,则行为就像翻译单元包含该标识符的文件范围声明一样,复合类型为翻译单元的结尾,初始化程序等于0.
| 归档时间: |
|
| 查看次数: |
2290 次 |
| 最近记录: |