为什么要编译这些代码?
_Static uint32_t my_arr[2];
_Static_assert(sizeof(my_arr) == 8, "");
_Static_assert(sizeof(my_arr[0]) == 4, "");
_Static_assert(sizeof(my_arr)[0] == 4, "");
前两个断言显然是正确的,但是我预计最后一行会失败,因为我的理解是,sizeof()
应该求值为一个整数文字,它不能被视为一个数组。换句话说,它的失败方式与下面一行的失败方式相同:
_Static_assert(4[0] == 4, "");
有趣的是,下面的代码确实无法编译(它们应该做同样的事情,不是吗?) :
_Static_assert(*sizeof(my_arr) == 4, "");
Error: unary’*’的无效类型参数(have‘ long unsignedint’) _ Static _ asserit (* sizeof (my _ arr) = = 4,“”) ;
如果需要的话,我使用的是 gcc5.3.0