这是下面的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));
没问题,我有点困惑。
答案 0 :(得分:8)
字符串文字具有静态存储持续时间,这意味着它们在程序的整个生命周期中都存在。您的代码中没有未定义的行为。
答案 1 :(得分:3)
这里没有UB。该标准表示字符串文字具有静态存储持续时间。
如果是这样,
static
函数可以使其正常工作吗?
对于函数,static
修饰符意味着完全不同的东西 - 它不会解决您的(显然不存在)问题。