「C言語/データ型と変数の高度な話題」の版間の差分

削除された内容 追加された内容
→‎enum: あるいは別の方法を試みようとして、たとえば外側をenumブロック、その内側に構造体ブロックを入れても、構造体の定義の際にメンバに int 型などを定義しなければいけなくなるので、動作しないか、
→‎enum: enum の宣言時に同時にenum変数を宣言することも可能であり、下記コードのように宣言できる。
651 行
}
</syntaxhighlight>
 
実行結果
<pre>
0: 日曜日
1: 月曜日
2: 火曜日
3: 水曜日
4: 木曜日
5: 金曜日
6: 土曜日
</pre>
 
列挙子の名前が <code>dw</code> で始まるのはタグ <code>'''D'''ay_of_the_'''W'''eek</code> の列挙子であることを示し、最後の列挙し <code>nDay_of_the_Week</code> 列挙子の総数で Number of <code>Day_of_the_Week</code> のつもり。列挙型の変数、<code>dw</code> はもちろん <code>enum '''D'''ay_of_the_'''W'''eek</code> 型であることを示しています。
659 ⟶ 670行目:
 
 
enum の宣言時に同時にenum変数を宣言することも可能であり、下記コードのように宣言できる。
<syntaxhighlight lang="C" highlight=18 line>
#include <stdio.h>
 
enum Day_of_the_Week {
dwSUNDAY,
dwMONDAY,
dwTUESDAY,
dwWEDNESDAY,
dwTHURSDAY,
dwFRIDAY,
dwSATURDAY,
nDay_of_the_Week,
} dw; // enum の最後で変数を宣言
 
int main(void) {
const char *names[nDay_of_the_Week] = {
"日曜s日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日",
};
for (dw = dwSUNDAY; dw < nDay_of_the_Week; dw++) { // 変数宣言はしてないので dw に型は不要になる
printf("%i: %s\n", dw, names[dw]);
}
}
</syntaxhighlight>
 
;ネストは無い
enum のネストは用意されていない。標準C言語でなくC++の話題になるが、仮にC++のclass機能の<code>{ }</code>ブロック内にenumのブロックを入れてみても、見た目はネストっぽくなるが、見た目だけに過ぎず、そうしたところで外側のclassにenumの機能は無い。
 
あるいは別の方法を試みようとして、たとえば外側をenumブロック、その内側に構造体ブロックを入れても、構造体の定義の際にメンバに int 型などを定義しなければいけなくなるので、コンパイル不能で動作しないか、もし仮にコンパイルできたとしても意図しない動作になりかねないので危険であろう。
 
===タグ===