2013-05-10 49 views
0

下面的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

爲什麼它是未定義的?您沒有訪問任何垃圾值。 – 2013-05-10 20:19:15

+0

字符串存在,你只是返回指向它的指針。它不是垃圾值......你拼錯吧 – cmd 2013-05-10 20:20:03

+0

@Jack:你有什麼特別的問題?究竟是什麼讓你懷疑你的UB功能? – AnT 2013-05-10 20:51:22

回答

8

字符串文字具有靜態存儲持續時間,這意味着它們在整個程序生命週期中都存在。代碼中沒有未定義的行爲。

3

這裏沒有UB。該標準說,字符串文字具有靜態存儲持續時間。

如果是這樣,可以static函數使它工作正常嗎?

對於函數,該static修飾符意味着完全不同的東西 - 它不會解決你的(顯然是不存在的)問題。

相關問題