请考虑以下代码片段,该片段是根据Tor源代码改编的:
/* This can be a malloc wrapper with minimal initialization. */ other_t *make_other(void); /* This struct is never defined. */ struct undef; typedef struct undef undef_t; undef_t *make_undef(void) { other_t *other = make_other(); return (undef_t*)other; }
假设undef_t
程序中的所有指针都是铸造other_t
指针,并进一步假设所有程序在使用之前undef_t*
将它们转换为铸造指针other_t*
.
根据C99标准的第6.3.2.3节,return
如果other
未正确对齐,则语句中的强制转换会调用未定义的行为undef_t
,但如果是,则将make_undef
返回的结果转换为other_t*
生成返回的原始指针make_other
.但是,undef_t
是一个未定义的类型,我找不到任何关于这些的对齐规则.这些转换是否仍然像undef_t
定义的那样有效并且具有正确的对齐方式?