考虑以下 C 代码:
struct base_type
{
// ...
};
struct complex_type
{
struct base_type base_type_part;
int complex_type_part;
};
void function(struct base_type* base_type_ptr)
{
struct complex_type* complex_type_ptr = (struct complex_type*)base_type_ptr;
complex_type_ptr->complex_type_part = 1;
}
int main()
{
struct complex_type complex_type_object;
function((struct base_type*) &complex_type_object);
// ...
}
这种黑客行为合法吗?
我一直在修改标准,尤其是关于别名的部分,我觉得不允许这样做,但每个人都这样做。
如果合法,依据是什么?