使用GCC 4.7:爲什麼這個代碼導致浮點異常 - SIGFPE
$ gcc --version
gcc (GCC) 4.7.0 20120505 (prerelease)
代碼(test.c的):
#include <stdint.h>
struct test {
int before;
char start[0];
unsigned int v1;
unsigned int v2;
unsigned int v3;
char end[0];
int after;
};
int main(int argc, char **argv)
{
int x, y;
x = ((uintptr_t)(&((struct test*)0)->end)) - ((uintptr_t)(&((struct test*)0)->start));
y = ((&((struct test*)0)->end)) - ((&((struct test*)0)->start));
return x + y;
}
編譯&執行
$ gcc -Wall -o test test.c && ./test
Floating point exception
SIGFPE由第二個賦值(y = ...)引起。在彙編列表中,這條線上有一個分支?請注意,x =和y =之間的唯一區別是投射到(uintptr_t)。
海灣合作委員會瀏覽器輸出:http://preview.tinyurl.com/8ah2fa7 – Wade
'char start [0];''意味着你不在標準定義的範圍內。除此之外會發生什麼,它真的很有趣嗎? –