【发布时间】:2012-04-15 18:01:52
【问题描述】:
难道后面函数返回的指针是不可访问的吗?
char *foo(int rc)
{
switch (rc)
{
case 1:
return("one");
case 2:
return("two");
default:
return("whatever");
}
}
所以 C/C++ 中局部变量的生命周期实际上只在函数内,对吗?这意味着,char* foo(int) 终止后,它返回的指针不再意味着什么,对吧?
我对局部变量的生命周期有点困惑。什么是好的说明?
【问题讨论】:
-
函数中唯一的“var”是参数
int rc。它的生命周期在return-s 中的每一个处结束。您返回的指针是字符串文字。字符串字面量具有静态存储期限:它们的生命周期至少与程序的生命周期一样长。 -
@PedroAlves 为什么不呢?方法允许抽象;如果将来从翻译资源中读取字符串,但产品的 V1(或 V0.5)不需要国际化支持怎么办?
-
@PedroAlves “您的代码肯定会工作(如果尝试编译,您可以看到它),” 这不符合。许多(大多数?基本上每个?)c 编译器会消耗非法代码,并且经常发出看起来可以工作的代码。但是在另一个编译器(甚至同一个编译器的不同版本)中尝试它可能会失败。
-
@PedroAlves,一个返回单个常量字符串的函数可能用途有限,但是根据输入或对象状态返回多个常量字符串中的任何一个呢?一个简单的示例是将枚举转换为其字符串表示形式的函数。
-
显然你从未见过
strerror函数。
标签: c function local-variables string-literals lifetime