次のような定義された動作は何ですか? GCCとMSVC両方のコンパイラと私のテストから列挙子と同じ名前の変数
#include <stdio.h>
typedef enum {
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2
} TEST_ENUM;
int main() {
TEST_ENUM testVar1 = ENUM_VAL_1;
TEST_ENUM ENUM_VAL_1 = ENUM_VAL_1;
TEST_ENUM testVar2 = ENUM_VAL_1;
printf("ENUM_VAL_1 = %u\n",ENUM_VAL_1);
printf("testVar1 = %u\n",testVar1);
printf("testVar2 = %u\n",testVar2);
return 0;
}
、これの動作はtestVar1は、しかし、次のステートメントは、変数ENUM_VAL_1を設定しようとする列挙値「ENUM_VAL_1」または1に等しく設定されるということですこれは変数ENUM_VAL_1を列挙値ENUM_VAL_1に設定するのではなく、当面は初期化されていないのでガーベジであることに注意してください。もちろん、testVar2は変数ENUM_VAL_1と同じガベージ値を取得します。
Cの標準に従ってこの動作が定義されていますか、それともこの未定義の動作ですか?それが定義されているかどうかにかかわらず、私はこのタイプの例があいまいさのために悪い練習であると推測しています。
ありがとうございます!
word enumeratorをword enumerationに置き換えて、テーマのタイトルを更新する必要があります。 –