[問題] C的strict aliasing rule
嗨,大家今天過的好嗎?
網址: https://reurl.cc/nZnAe
裡面的一小段程式碼:
float funky_float_abs (float a)
{
unsigned int temp = *(unsigned int *)&a;
temp &= 0x7fffffff;
return *(float *)&temp;
}
取浮點數的絕對值
網址裡面說這樣寫會出問題,因為用char*與void*以外的型別(以這例子: unsigned int)
拿位址(&a)會讓pointer指到別的address上。
但我用TDM-GCC 4.9.2與ideone(gcc6.3)編譯並沒有出現問題
結果: https://ideone.com/HJ6qX0
因為stackoverflow的這篇文章是10年前,我在想這部分是不是後來在C standard有被修正
過,但是網路上找找不到相關資訊,故上來請教一下板友~
感恩感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.216.18
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1548221834.A.B4B.html
→
01/23 14:48,
6年前
, 1F
01/23 14:48, 1F
→
01/23 17:30,
6年前
, 2F
01/23 17:30, 2F
→
01/23 17:31,
6年前
, 3F
01/23 17:31, 3F
推
01/23 19:05,
6年前
, 4F
01/23 19:05, 4F
→
01/23 19:05,
6年前
, 5F
01/23 19:05, 5F
推
01/23 23:12,
6年前
, 6F
01/23 23:12, 6F
→
01/23 23:13,
6年前
, 7F
01/23 23:13, 7F
→
01/23 23:13,
6年前
, 8F
01/23 23:13, 8F
→
01/24 09:37,
6年前
, 9F
01/24 09:37, 9F
→
01/24 16:21,
6年前
, 10F
01/24 16:21, 10F
推
01/25 22:27,
6年前
, 11F
01/25 22:27, 11F
推
01/26 14:31,
6年前
, 12F
01/26 14:31, 12F
→
01/26 14:32,
6年前
, 13F
01/26 14:32, 13F
→
01/26 14:32,
6年前
, 14F
01/26 14:32, 14F
→
01/26 14:34,
6年前
, 15F
01/26 14:34, 15F
→
01/26 14:35,
6年前
, 16F
01/26 14:35, 16F
→
01/26 14:35,
6年前
, 17F
01/26 14:35, 17F
推
01/31 11:24,
6年前
, 18F
01/31 11:24, 18F