K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>以下 JIS X3010:2003 より抜粋するので C の場合に限定 > >6.7.2.2 - 列挙型 - 列挙子並びの中の識別子は、型 int を持つ定数として宣言され、 >この型の定数が許されるところならばどこに現れてもよい > >なので元ネタのキャストは要らないと判断してよさそうです。 > >enum e_aaa 型の underlying type は char であってもよい、のと、 >その要素である aaa の型は int である、のとが矛盾してるように見えますが・・・ ># 集合論的におかしい > >enum 型の識別子ではなくて enum 型の変数(オブジェクト)が現れた場合には >6.2.5 - 型 - 列挙体は[整数型]である >6.3.1.1 - 整数型 - 整数拡張 元の型のすべての値が int 型で表現可能な場合 int 型に変換される >6.7.2.2 - 列挙型 - 列挙定数の (既述につき snip) >となり、やはり int となるため問題ないです。 > >6.7.2.2 の[制約]は[定数の値を定義する式]としか書いてないので、 >enum e_bbb { bbb=2147483647, ccc }; は言語規格書的には合法と考えざるを得ません。 ># gcc ではきっちりコンパイルエラーになりますが。 > >C++ の場合はこの辺いろいろ規制緩和されている+言語仕様も厳密化されているので >仕様書を読んでいて安心できます。先の [制約] のような不安要素も文書化され済み。
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!