Hành vi được xác định cho một cái gì đó như sau?Biến có tên giống như điều tra
#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;
}
Từ thử nghiệm của tôi với cả GCC và MSVC trình biên dịch, hành vi của việc này là testVar1 sẽ được thiết lập bằng giá trị liệt kê "ENUM_VAL_1" hoặc 1. Tuy nhiên, báo cáo kết quả tiếp theo sẽ cố gắng thiết lập các ENUM_VAL_1 biến bằng giá trị riêng của nó, tất nhiên là hiện tại chưa được khởi tạo và do đó rác, thay vì thiết lập biến ENUM_VAL_1 bằng giá trị điều tra ENUM_VAL_1. Sau đó, tất nhiên, testVar2 cũng sẽ nhận được cùng một giá trị rác như biến ENUM_VAL_1.
Hành vi được xác định là gì theo tiêu chuẩn C hoặc hành vi không xác định này? Dù nó có được xác định hay không, tôi đoán loại ví dụ này là thực hành tồi tệ ít nhất là do sự mơ hồ.
Cảm ơn!
Bạn nên cập nhật tiêu đề của chủ đề bằng cách thay thế liệt kê từ cho điều tra từ. –