[英]Casting a constant to a union
以下代碼:
#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 ++)是否支持此行為也很有趣。 有人知道嗎?
編輯:轉換為聯盟是一個GCC擴展,所以使用它不是一個好主意。
感謝Maurits和Neil! 我沒想過用-pedantic檢查!
在GNU C語言擴展中,轉換為union將標記為C標准的擴展。 所以很可能你不會在C99或任何其他C標准中找到它。 IBM C編譯器也支持此擴展。
[neilb@GONERIL NeilB]$ gcc -Wall -pedantic sw.c
sw.c: In function 'main':
sw.c:11: warning: ISO C forbids casts to union type
sw.c:12: warning: ISO C forbids casts to union type
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.