0

这是下面的C代码一个UB吗?我可以访问垃圾值吗?如果是这样,可以static function使它正常工作吗?

const char *foo_name(int x){
    switch(x) {
       case FOO: return "foo";
       case BAA: return "baa";
       default: return "unknow";
    }
}

printf("%s\n",foo_name(FOO));根据 C 标准,如果可以,我有点困惑。

4

2 回答 2

8

字符串文字具有静态存储持续时间,这意味着它们存在于程序的整个生命周期中。您的代码中没有未定义的行为。

于 2013-05-10T20:20:36.927 回答
3

这里没有UB。该标准说字符串文字具有静态存储持续时间。

如果是这样,static功能可以使它正常工作吗?

对于函数,static修饰符意味着完全不同的东西——它不会解决你的(显然不存在的)问题。

于 2013-05-10T20:21:17.043 回答