Will the second branch of condition be executed in some case?
- Vâng, nó có thể là có thể, nó phụ thuộc vào những gì khác đang xảy ra trong các mã và những gì các trình biên dịch chọn để làm với mã của bạn.
Shouldn't compiler warn about unreachable code?
- Không, nó có thể không phải vì không có đảm bảo rằng nó không thể truy cập
Cầm lấy cái này ví dụ:
int x = 11;
void* change_x(){
while(1)
x = 3;
}
int main(void)
{
pthread_t cxt;
int y = 0;
pthread_create(&cxt, NULL, change_x, NULL);
while(1){
if(x < 10)
printf("x is less than ten!\n");
else if (x < 5){
printf("x is less than 5!\n");
exit(1);
}
else if(y == 0){ // The check for y is only in here so we don't kill
// ourselves reading "x is greater than 10" while waiting
// for the race condition
printf("x is greater than 10!\n");
y = 1;
}
x = 11;
}
return 0;
}
Và kết quả:
[email protected]:~> ./a.out
x is greater than 10!
x is less than 5! <-- Look, we hit the "unreachable code"
Không, nó sẽ không được thực hiện. Hầu hết các id đều cảnh báo về mã không thể truy cập được. –
Một ngôn ngữ tương tự có thể bị quá tải '>' và khiến nó làm điều bất ngờ. –
Một tình huống khác tôi có thể nghĩ đến nơi nhánh thứ hai được thực hiện là nếu 'x' là biến toàn cục và bạn có một chuỗi khác có thể thay đổi giá trị của' x' ban đầu lớn hơn 10 thành giá trị nhỏ hơn 5 sau kiểm tra đầu tiên trong một hoàn cảnh không may mắn. ví dụ. 'x' là 11 lúc đầu. Thread1 làm cho phép thử đầu tiên 'if (x <10)' là false và sau đó, Thread2 thay đổi giá trị của 'x' thành 4. – halex