パスワードを忘れた? アカウント作成
452753 journal

Endowsの日記: Endows の へっぽこプログラマ日誌 第18回 3

日記 by Endows

フィールドは int としてのみ宣言してもよいが、移植可能にするには、 signed あるいは unsigned を明示的に指定すべきである。(「プログラミング言語 C 第2版」183ページ)

ってことは、

struct {
unsigned char flag1 : 1;
unsigned char flag2 : 1;
} flags;

ってのは ANSI C 的にはダメなんですか? 各コンパイラの独自拡張という扱いなんでしょうか。それとも私が勘違いしてるだけなんでしょうか。

教えて偉い人。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2003年12月12日 12時04分 (#453103)
    どちらかと言うと、エロい人なのですが。
    gcc であれば、-pedantic-errors とかするとアレかもしれません。
    • なるほど、初めて知りましたです。

      たしかに -pedantic-errors とすると

      bitfeeld.c:4: bit-field `flag1' type invalid in ANSI C
      bitfeeld.c:5: bit-field `flag2' type invalid in ANSI C

      のようになりますね。
      勉強になりました。
      親コメント
      • さらに混乱の種を。
        C99では、int型の他に、_Bool型(0, 1を保持するのに十分な大きさを持つ整数)もビットフィールドとして許されるようになったようです。
        C99は、いろいろとかゆいところに手が届く拡張がなされているので、ビットフィールドも拡張されているかと期待したのですが、どうやら_Boolが仕えるようになっただけのようですね。

        /*
        C++スタイルのコメント、指定初期化子、enmumリスト中の余分なコンマ、零長配列メンバのためにC99を導入するメリットはあると思っているのでYoh2
        でも可変長配列とコンパウンドリテラルは諸刃の剣だよなぁ……(コンパウンドリテラルは使うけどさ)
        */
        --
        巧妙に潜伏したバグは心霊現象と区別が付かない。
        親コメント
typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...