簡體   English   中英

向聯盟施放常數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM