这是一个未定义的行为吗?

时间:2013-05-10 20:17:18

标签: c undefined-behavior

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

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

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

  

如果是这样,static函数可以使其正常工作吗?

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