#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
Tôi đang xác định biến số nguyên được gọi là c
và tôi chỉ định giá trị của nó cho chính nó. Nhưng làm thế nào điều này thậm chí có thể biên dịch? c
chưa được khởi tạo, vậy giá trị của nó có thể được gán cho chính nó như thế nào? Khi tôi chạy chương trình, tôi nhận được c is 0
.Tại sao mã C này biên dịch?
Tôi giả định rằng trình biên dịch tạo mã lắp ráp là gán khoảng trống cho biến số c
(khi trình biên dịch gặp phải câu lệnh int c
). Sau đó, phải mất bất kỳ giá trị rác nào trong không gian chưa được khởi tạo đó và gán nó trở lại c
. Đây có phải là những gì đang xảy ra không?
Thật không may, nó được cho phép - bạn thường có thể làm cho trình biên dịch phát ra một cảnh báo về nó, ví dụ sử dụng g ++ (nhưng không phải gcc vì lý do nào đó) bằng cờ -Wall tạo cảnh báo. –
@Neil, để buộc lỗi với gcc, bạn sử dụng '-Werror = uninitialized -Winit-self' –