В настоящее время я читал о некоторых строгих правилах псевдонимов, и мне было интересно, является ли приведение указателя на неполную структуру неопределенным поведением.
Пример 1 :
#include <stdlib.h>
struct abc;
int main(int argc, char *argv[])
{
struct abc *mystruct;
char *buf;
buf = malloc(100);
mystruct = (struct abc*)buf;
// and then mystruct could be submitted to a function, where it is
// casted back to a "char *", the "struct abc" will never be completed.
return 0;
}
Пример 2 :
struct abc1;
struct abc2;
int foo(struct abc1 *mystruct1)
{
struct abc2 *mystruct2;
mystruct2 = (struct abc2 *)mystruct1;
// and then mystruct2 could be submitted to a function, where it is
// casted to a "char *", both structs stay incomplete.
return 0;
}
Итак, мой вопрос: приведение указателей к неполным структурам, как в этих двух примерах, запрещено стандартом c11, и если да, то какая частьстандарт запрещает это?