→ firejox:我應該要說 編譯器是踩在UB的情況下誕生的東西嗎XD 07/22 21:38
→ firejox:容許些微UB可能會讓自己比較好過一點... 07/22 21:44
通常都可以避免啦。這幾題根本就是故意搞怪的吧!不過編譯器一
直(合法地)亂搞也是很討厭...
→ firejox:void 的本意就是 虛空呀~~ 07/22 21:47
我覺得與其說虛空,比較像是 unit 型態。虛空代表不允許任何值,unit
型態洽允許一個值。這已經是純數學的型態理論了,有興趣的可以看這裡:
http://en.wikipedia.org/wiki/Unit_type
→ firejox:我覺得套用到第8點有點怪怪的... 07/22 21:59
→ kiedveian:第七題是3個運算式吧… 07/22 22:58
→ suhorng:@kiedveian: i^=j^=i^=j; 有問題 (修改多次)的樣子 07/22 23:16
對我是這個意思沒錯。至少 i 被改兩次(不管其他未定義的部份)
→ tropical72:聖誕樹 長怎樣? 07/22 23:17
推 littleshan:puts("聖誕樹"); 不需要迴圈 07/22 23:48
→ xatier:樓上正解 07/23 00:11
哈哈果然是正解 xDDD
推 Ross0916:是掉書袋 最近常覺得F大若唸法也是一流的XD 07/23 04:26
感謝指正!唉人生太短了,光電腦科學裡面的一個小領域就讀不完了...
※ 編輯: Favonia 來自: 140.112.30.39 (07/23 07:33)
推 softwind:既然我在文章裡 那我要補充一下第一題 結果應該是 07/23 14:29
→ softwind:1. build不過 or 2. GCC有可能把 void* 當成char* offset 07/23 14:29
如果限定 GCC 我目前查到的說明文件有這些:
(1) GCC 把 void 大小當作 1:(其實原文章就有人指出)
http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
(2) 數字和指標的轉換就跟大家想的差不多:
http://gcc.gnu.org/onlinedocs/gcc/Arrays-and-pointers-implementation.html
但是還有最後一個問題!我有一台電腦 %d (int) 洽是 32 位元,但是指
標有 64 位元(LP64 架構)。我懶得查 printf 內部到底怎麼實作的,不知道
會不會出問題。總之第一題有很多危險的地方都要看實作怎麼做。
唉姑且不論我覺得這題跟 C 語言的程度毫無關係外。我想引用英文版維基
其中一段:
| There are variations in spirit, as well. Functional programming
| languages, like Lisp, ML and Haskell, tend to substitute a fac-
| torial program for Hello World, as the former emphasizes recursive
| techniques, which are a large part of functional programming,
| while the latter emphasizes I/O, which violates the spirit of
| pure functional programming by producing side effects.
@ http://en.wikipedia.org/wiki/HelloWorld
我三種語言(流派)都有學過,所以對於「『所有』程式語言」的「所有」
有點感冒 xDDD 總覺得不太尊重其他語言。
※ 編輯: Favonia 來自: 140.112.30.39 (07/23 19:23)
推 Bencrie:一年前的推文被挖出來鞭真讓人傷心 orz 07/24 01:08
推 loveme00835:學長拍拍 07/24 01:14
對不起 orz 我只是想要點出以前被 m 的文章可能誤導人的地方而已。
→ firejox:第1題除了void* 個人認為其他不太會有問題... 07/24 01:49
→ firejox:64與32 間差的只是cast而已.... 07/24 02:10
因為 printf 後面有不定數量的參數,所以實務上編譯器沒有辦法做太多轉
型。這跟寫死 32 位元的參數不一樣;因為如果寫死的話,編譯器事前可以知道
要把參量轉型成 32 位元。實務上如果 64 位元的參量要拆成兩部份傳,就可能
發生災難(一個參量被當成兩個參量)。我現在在用的電腦是 AMD64, 它的 ABI
規定每個參數都是用 64 位元來對齊,然後暫存器也是 64 位元,所以在這例子
中沒辦法提供驚人的結果 xD
(我知道 gcc 一般會按照平台預設的 ABI, 然後我也知道我自己用的 ABI
長什麼樣子。只是這些 C 標準什麼都沒講,也許有人用奇怪的 ABI 也說不定。)
→ softwind:嗯~ sorry 我不清楚原po的工作類型 不過如果是 電腦/手機 07/24 01:50
→ softwind:or 代工廠 基本上語言會比較侷限在 C/C++/Java 這3種 07/24 01:51
你當我在發牢騷就好 xD 我個人覺得第一個程式叫什麼不太重要啦 xD 還是
要謝謝你的回應。然後我平常就會學各種怪東西,跟工作沒什麼關係 xD
※ 編輯: Favonia 來自: 140.112.30.39 (07/24 10:06)
※ 編輯: Favonia 來自: 140.112.30.39 (07/24 10:15)