Mã này biên dịch, nhưng tôi có một lỗi thời gian chạy trong Visual Studio:Sử dụng một biến có cùng tên trong không gian khác nhau
Run-time thất bại kiểm tra # 3 - biến 'x' đang được sử dụng mà không cần được khởi tạo ...
int x = 15;
int main()
{
int x = x;
return 0;
}
tôi không hiểu hành vi đó ... trong hộp lỗi khi tôi nhấp tiếp tục chương trình sơ yếu lý lịch và x có hàm hỏng (như -8556328
thay vì 15
).
Tại sao mã này hoạt động mà không có sự cố và mảng int được khai báo tốt?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
Bạn đã gắn thẻ cả C và C++. Bạn đã biên dịch cái nào? –
Một số sự kiện thú vị: 'gcc 4.8.4', biên dịch và chương trình này có thể chạy với' -Wall -Wextra -pedantic' được bật. 'clang 7.0.0' biên dịch nó, và có thể chạy như vậy. Tuy nhiên nếu 'printf ("% d \ n ", x);' được thêm vào sau 'int x = x;' (tôi đoán bất kỳ cách sử dụng thực tế nào của 'x'), trình biên dịch đưa ra cảnh báo thân thiện hơn:' warning: variable 'x' được uninitialized khi được sử dụng trong khởi tạo riêng của nó [-Wuninitialized] '. 'gcc' vẫn biên dịch và chạy nó ngay cả với' printf' và in '0'. Tuy nhiên chạy chương trình thông qua valgrind cho phép 'nhảy có điều kiện hoặc di chuyển phụ thuộc vào giá trị uninitialised (s)' – Joakim
@Joakim: Thú vị; cảm ơn cho kết quả.GCC và Clang có thuộc quyền của họ, tức là hành vi này không được xác định theo kiểu kinh điển? –