假设我们有以下 C(或类似语言)代码:
if (x < 10)
do_work1();
else if (x < 5)
do_work2();
在某些情况下会执行此条件的第二个分支吗?编译器会警告无法访问的代码吗?
假设我们有以下 C(或类似语言)代码:
if (x < 10)
do_work1();
else if (x < 5)
do_work2();
在某些情况下会执行此条件的第二个分支吗?编译器会警告无法访问的代码吗?
Will the second branch of condition be executed in some case?
Shouldn't compiler warn about unreachable code?
以此为例:
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;
}
和输出:
mike@linux-4puc:~> ./a.out
x is greater than 10!
x is less than 5! <-- Look, we hit the "unreachable code"
do_work2
可以执行的方式。do_work2
可以执行。通常无法证明代码是否可达。编译器可以有一些简单的、可理解的和快速检查的规则来检测简单的无法访问代码的情况。它不应该包括一个缓慢而复杂的求解系统,这种系统有时才有效。
如果您想进行额外检查,请使用外部工具。
第二个分支不会被执行,编译器也不应该警告无法访问的代码。
不,编译器不会为此代码生成任何警告(代码无法访问)。当您在没有任何条件的情况下使用 return 时,这种警告通常会出现。
喜欢
int function(){
int x;
return 0;
x=35;
}
在这种情况下,它会给你警告。