[英]Returning address of a local variable error
我输入以下代码:
void main()
{
int *a;
a = foo();
printf("%d\n", *a);
}
int* foo()
{
int b = 10;
return &b;
}
编译后,有两个问题:
1. error - Conflicting type for foo()
2. warning - function returns address of local variable
但是我写了这个
int* foo();
void main()
{
int *a;
a = foo();
printf("%d\n", *a);
}
int* foo()
{
int b = 10;
return &b;
}
现在,它在编译后没有给出错误,这很明显,但是,为什么编译器没有给出返回本地变量地址的警告?
声明或不声明函数如何影响局部变量的返回地址?
抱歉,以前没有提到,但是我正在使用GNU GCC编译器
C标准不要求编译器发出警告,语法错误除外。
ISO / IEC 9899:1999,5.1.1.3:
如果预处理翻译单元或翻译单元违反任何语法规则或约束,即使该行为也被明确指定为未定义或实现,则符合条件的实现应至少产生一条诊断消息(以实现定义的方式标识)定义。 在其他情况下,无需生成诊断消息。
您描述的行为不一致(即不好),但是有效/符合标准。
编译器不需要向您发出警告或错误,语法错误除外。 取决于情况,编译器可能会或可能不会检测到语义错误。
那是多余的,但不是标准要求的。
在您的情况下,不一致会有些不幸。
您必须在调用函数之前声明它。 在第一种情况下,您调用了foo,然后定义了它。 像这样尝试,它应该可以工作:
int* foo()
{
int b = 10;
return &b;
}
void main()
{
int *a;
a = foo();
printf("%d\n", *a);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.