Trong mã sau đây, tại sao biến số i
không được gán giá trị 1
?Định nghĩa biến trong câu lệnh chuyển đổi
#include <stdio.h>
int main(void)
{
int val = 0;
switch (val) {
int i = 1; //i is defined here
case 0:
printf("value: %d\n", i);
break;
default:
printf("value: %d\n", i);
break;
}
return 0;
}
Khi tôi biên dịch, tôi nhận được một cảnh báo về i
không được khởi tạo mặc dù int i = 1;
rằng khởi rõ ràng nó
$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
printf("value %d\n", i);
^
Nếu val = 0
, sau đó đầu ra là 0
.
Nếu val = 1
hoặc bất cứ điều gì khác, sau đó đầu ra cũng là 0.
Xin giải thích cho tôi tại sao biến i
được khai báo nhưng không được định nghĩa bên trong công tắc. Đối tượng có mã định danh là i
tồn tại với thời lượng lưu trữ tự động (trong khối) nhưng không bao giờ được khởi tạo. Tại sao?
Tôi hỏi về bạn trước khi định nghĩa nhãn trường hợp bạn bè. Bởi vì tôi đang cố gắng sử dụng i là biến cục bộ bên trong switch. – sakthi
Vui lòng không đóng dưới dạng bản sao C++. Tìm phiên bản C. – 2501
Đây không phải là bản sao của bài đăng bởi @ user3121023 vì trong câu hỏi được liên kết, khai báo 'i' là ** bên trong ** một câu lệnh' case', vì vậy bạn chỉ cần quấn nó quanh dấu ngoặc đơn. Trong trường hợp này, việc khai báo 'i' nằm ngoài bất kỳ câu lệnh' case' nào, tôi không chắc chắn điều này là hợp lệ C. – Holt