質問

次のコード:

#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で正しくコンパイルして実行します。 1回の試行は組合で、適切なフィールドがありませんそのため定数をキャストする場合、エラーメッセージが生成されます。

(C99)標準を見てみると、しかし、私はこの動作が記述されている部分を見つけることができていませんでした。そこで、私の質問:

  

の組合型は互換性のあるタイプ?

でフィールドを有していれば、私は労働組合型に定数をキャストすることができC標準保証をい

または、他の言葉でます:

  

?型((val_t)10)val_t有効右辺値です

また、この動作は、他のコンパイラ(あるいは少なくともMSのVisual C ++)によってサポートされているかどうかを知るために興味深いものになるだろう。 DOESの誰でも知っていますか?

編集:   それはそれを使用するのは良い考えではありませんので、労働組合にキャストすると、GCCの拡張機能です。

マウリッツとニールのおかげ!私がチェックする-pedanticを使用して考えていなかった!

役に立ちましたか?

解決

組合には GNU C言語拡張機能のキャストは次のようにマークされています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帰属
所属していません StackOverflow
scroll top