A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
C言語の仕様の下書きならここで見られますので、まずは仕様をみてみる事をおすすめします。
http://www.open-std.org/jtc1/sc22/wg14/
とりあえず、最近公開されたC言語の仕様であるC11の最新の下書き (ほとんどリリースと同じだと予想しますが) はこれですね。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/ …
この6.7.2.2 Enumeration specifiersを読むと良いと思います。
| 2 The expression that defines the value of an enumeration constant shall be an integer
| constant expression that has a value representable as an int.
まず、enum定数はint型で表現できるものしか表現出来ません。
| 4 Each enumerated type shall be compatible with char, a signed integer type, or an
| unsigned integer type. The choice of type is implementation-defined, but shall be
| capable of representing the values of all the members of the enumeration.
そして、enum型はchar型、符号付きint型、符号なしint型と互換性があります。
どの型になるかはenum定数が全て入る大きさであれば実装依存です。
まあ、よほどメモリーが逼迫している環境で使うバイナリーを吐くコンパイラーでもない限りint型にするのでは?
> スタティック変数のstateを初期化するには、Start/Collect/Skip/Endでしかできないのかな?と。
見落としがあるかもしれませんが、ざっと仕様を見る限り、そういう制限は特に見つけられませんでした。
ただ、ビット数が不足してしまい、メンバーではない値を代入した場合に正しく扱える保証はない可能性があるでしょう。
> enumを型宣言として扱い、enum内で定義される数によって、スタティック変数のstateが、char/int/longとして展開されるのかなと。
実装依存ですが、仕様を見る限りではenum定数を表せる最小限の型となるべくchar / int / unsigned intを使い分けることはありえるでしょう。
ただ、long型との互換性は無さそうです。
早々教えていあただいたページチェックしたいと思います。改めて新しくわかた事がありましたら、ご報告させていただきます。御回答ありがとうございました。
No.2
- 回答日時:
C言語の仕様で、static変数は暗黙のうちにゼロに初期化されます。
この場合、変数stateの初期値はStartです。名前空間が違うので問題ないですが、変数名が state で、型名(enumのタグ名)も同じ state というのは、あまり良くない名前の付け方ですね。
No.1
- 回答日時:
enum型の定数は特に指定がない限り先頭を基準として0から始まる整数値の定数が割り当てられます(増加値は1)。
なので、Startは0、Collectは1(以下略)のような意味になります。
標準出力に出力してみるとどうなっているかが分かりやすいかと思います。
この回答への補足
早々の御回答ありがとうございます。
アップしてから自分なり考えていたのですが、使われ方としたら、下記のような宣言したのと同じような扱いなのです。で、思ったのが、スタティック変数のstateを初期化するには、Start/Collect/Skip/Endでしかできないのかな?と。それで#define OTHERS 100;として、state=OTHERとなるか調べてみたのですが、OKのようでした。
enum state {
Start,
Collect,
Skip,
End
} state;
static int state;
で、思ったのですが、enumを型宣言として扱い、enum内で定義される数によって、スタティック変数のstateが、char/int/longとして展開されるのかなと。2日ほど前から悩んでいまして、本質問をアップして後、再度熟考してみたら、上のような事が閃いた次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# int tff(int clk) { static int state = 0; //状態 stat 1 2022/07/11 21:14
- Perl Perlでファイルの末尾から指定文字列を検索してファイルに吐き出したい 4 2022/04/04 16:15
- 英語 STATE COMPLIANCE N/A の意味を教えてください。 3 2023/04/21 21:03
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- その他(プログラミング・Web制作) micropython コードについて 2 2023/06/14 13:13
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Java Javaで、インターフェースがクラスを複数格納することはありますか? 2 2022/06/14 08:37
- 哲学 句読点の記述の仕方について 記号論理学の本を読んでいたら文章の句読点が「、。」ではなく、 「, .」 3 2023/02/26 00:03
- Excel(エクセル) エクセルで勤務時間の計算をしています。 下記図でstartは勤務開始時間、endは勤務終了時間です。 5 2022/06/07 13:51
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
strchr() の第2引数はなぜ int ...
-
CStringをwchar_tに変換したい
-
_TCHAR*での引数の読み込み
-
間接操作のレベルとは
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
ftoa の作り方
-
標準ライブラリ関数の自作につ...
-
c言語です。
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
起動時の引数の取得方法が分か...
-
コマンドラインに入力されてい...
-
配列をnビットシフトする
-
RGB→YUV変換のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報