следующий код:
#include <stdio.h>
typedef union {
int n;
char *s;
} val_t;
int main(void) {
val_t v1,v2;
v1 = (val_t)"Hello World";
v2 = (val_t)10;
printf("%s %d\n", v1.s, v2.n);
return(1);
}
компилируется и выполняется правильно с gcc. Если попытаться привести константу, для которой в объединении нет подходящего поля, выдается сообщение об ошибке.
Однако, глядя на стандарт (C99), я не смог найти раздел, где описано это поведение. Отсюда мой вопрос:
Гарантирует ли стандарт C, что я могу привести константу к типу объединения, при условии, что у типа объединения есть поле с совместимым типом?
или, другими словами:
Является ли ((val_t)10)
допустимым значением типа val_t
?
Было бы также интересно узнать, поддерживается ли это поведение другими компиляторами (или, по крайней мере, MS Visual C ++). Кто-нибудь знает?
EDIT:
Приведение к объединению является расширением GCC, поэтому его не рекомендуется использовать.
Спасибо Морицу и Нилу! Я не думал об использовании -pedantic для проверки!