C_and_CPP 板


LINE

※ 引述《loveme00835 (朴髮箍)》之銘言: : 或是如粉紅色字體所寫, 中括號裡的敘述值只能擺正整數: : int array[ 0 ]; : 以上這行, 用 gcc 編譯加上選項 -pedantic 就會顯示警告: : [Warning] ISO C forbids zero-size array 'array' : 這樣做會導致未定義行為! 程式會怎麼掛沒人保證; 而不是會怎麼 : 跑沒人保證... 先說明清楚,沒事大家的確不要這樣寫比較好。這裡會很龜毛的討論標準的 技術細節,沒興趣的請按左鍵離開 xD 懶得看標準的只需記得「不要這樣寫!」 標準沒有很清楚的說明 int array[0]; 是未定義。我猜誤以為標準有非常清 楚說明的的人是因為讀到這句: C99+TC1/2/3 n1256 4/1 If a "shall" or "shall not" requirement that appears outside of a constraint is violated, the behavior is undefined. ... 注意有個但書「outside of a constraint」 C99+TC1/2/3 n1256 6.7.5.2/1 注意這是一條 constraint!!! ... If the expression is a constant expression, it shall have a value greater than zero. ... 所以其實標準沒有很清楚說這是「未定義」。反而標準要求編譯器要有錯誤 訊息才行。程式違反 constraint 的話編譯器是有責任提醒的: C99+TC1/2/3 n1256 5.1.1.3/1 A conforming implementation shall produce at least one diagnostic message (identified in an implementation-defined manner) if a pre- processing translation unit or translation unit contains a violation of any syntax rule or constraint, even if the behavior is also explicitly specified as undefined or implementation-defined. 所以要求程式設計師小心的同時,也應注意編譯器有沒有發出錯誤訊息。個 人覺得程式設計師已經夠辛苦了,這種雜事當然丟給編譯器做就好。既然標準有 說要有錯誤訊息,我覺得一點也不需要怪程式設計師,反而要怪為什麼得用這麼 迂迴的方法才印得出錯誤訊息。(如 gcc 4.5.2 連加上-std=c99 -Wall 都不會顯示,得要用如 loveme00835 大大提的 -pedantic) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.39
1F:→ loveme00835:所謂未定義是指「沒有說這時候應該怎麼做」, 而不是說 06/27 01:58
2F:→ loveme00835:「這時候你會出錯」 06/27 01:59
3F:→ loveme00835:因為這有時會明講 behavior is undefined, 但是上面寫 06/27 02:02
4F:→ loveme00835:的你沒做到, 也是等於這件事情 06/27 02:03
5F:推 a127a127:唔,看不太懂3、4F那句的意思@_@a。 06/27 02:46
6F:→ a127a127:看起來即使行為未定義,編譯器也有責任丟一個訊息提醒。 06/27 02:48
7F:→ a127a127: ^在某些情況下, 06/27 02:49
er... 總之 (1) 標準沒有清楚說未定義 (2) 編譯器要負責提醒這種錯誤 === 感謝 a127 提醒!C 標準對於 constraint 有嚴格定義,跟一般人的用法 不一樣。要怎麼知道是 constraint 呢?以 C99+TC1/2/3 (n1256) p.128 為例: 6.7.5.2 Array declarators Constraints 1 In addition to ... 2 An ordinary identifier ... Semantics 3 ... 4 ... 所以前兩個段落就是 constraints! 裡面出現的 shall 不受到 4/1 的規範。 而其他地方出現的 shall/shall not 只要一違反就是未定義,希望有成功清楚 解釋。先說我討厭標準寫得這麼麻煩,不過它的確是這個意思。 ※ 編輯: Favonia 來自: 140.112.30.39 (06/27 04:24)
8F:推 a127a127:懂了@_@a,感謝<(_ _)>,所以這根本是有定義的喔 @_@a 06/27 04:25
9F:→ Favonia:我覺得標準根本沒講清楚。標準的重點在於編譯器要發警告! 06/27 04:28
10F:推 a127a127:看了一下其他的constraint,好嚴重啊,一違反幾乎就CE了 06/27 05:34
11F:→ angleevil:c/c++真的是很煩程式語言.尤其是c有好嚴重的歷史包袱 06/27 09:52
12F:→ yoco315:樓上讓我想到一件很有趣的事情,很多C的信徒覺得C++很dirty 06/27 11:22
13F:→ yoco315:卻無視這些dirty幾乎都是從C繼承來的這個事實 XD 06/27 11:23
14F:→ james732:很好奇如果C++完全不理會C的相容性,會是怎樣的語言 XD 06/27 11:23
15F:→ james732:可惜實際上不可能這麼做... 06/27 11:23
16F:→ angleevil:一定是很完美的語言,竟然可以忍受c的黑暗包袱 06/27 11:29
17F:推 littleshan:回樓樓上 請見 http://www.digitalmars.com/d/ 06/27 12:52
18F:→ james732:D語言算是不理C的C++? 之前沒有深入研究過...XD 06/27 12:55
※ 編輯: Favonia 來自: 140.112.30.39 (06/27 12:58)
19F:→ angleevil:沒深入研究,但是覺得不太算. 06/27 14:00
20F:→ yoco315:之前有花一點時間摸了一下,覺得是很不錯的語言,拿掉了很多 06/27 15:25
21F:→ yoco315:缺點,加進了一些C++沒有的優點,不過後來C++0x越來越讓人期 06/27 15:26
22F:→ yoco315:待,且golang的型別系統也讓人很喜歡,然後就不鳥d了 QQ 06/27 15:27
23F:推 loveme00835:XD 06/27 15:45
24F:推 littleshan:我倒是看過 D 2.0 後就對 C++0x 不抱期望了 06/27 16:48
25F:→ angleevil:~"~ 我的錯覺嘛? 我記得wiki沒有很稱讚D阿 06/27 17:49
26F:推 purpose:嫌貨才是買貨人,沒人用的東西就不會有人嫌 06/27 17:52
27F:→ yoco315:是喔,那我也來看一下2.0,竟然前輩這麼推 06/27 17:57
28F:→ yoco315:真的是很優秀的語言, 真替她難過 QQ 06/27 18:16
29F:推 loveme00835:C++: Q口Q 06/27 18:33
30F:推 xatier: C++: Q口Q 06/27 18:38
31F:→ angleevil:誰叫c++還不肯離開c.c++98版本後,早就可以自立門戶 06/27 20:47
32F:→ angleevil:要不是跨平台的問題. 06/27 20:48
33F:推 littleshan:C++要是離開C就不會有人用了,因為舊的code無法編 06/27 22:18
34F:→ yoco315:小善是對的 06/28 09:15
35F:推 stosto:C++離開C後 C++使用者會很開心的 06/29 00:08
36F:→ james732:不過真正的C++使用者應該不太多....XD 06/29 00:11
37F:→ yoco315:james是對的 06/29 16:19
38F:→ angleevil:可能要先定義真正的意思 06/29 17:24







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP