2016-07-08 74 views
-8

使用if语句可以检查整型函数的返回值。 该函数在此范围内执行。为什么我不能使用开关检查功能的返回?

if(!yourfunction) 
{ 
    do something; 
} 
else 
{ 
    do something else; 
} 

然而,交换机中的情况完全相同,甚至不会执行该功能。为什么?

switch(yourfunction()) 
{ 
     case 1: 
      do something; 
     case 0: 
      something else; 
} 
+0

这是为什么downvoted? – vortexman100

+0

它***是可能的。但是,对于switch语句,您似乎使用了无效的语法。 – immibis

+1

@ vortexman100不是我的downvote,但你的'switch'缺少花括号,break和默认值。所以很难猜测你在问什么,而你并不在乎解释什么“不起作用”。 – dxiv

回答

-1

它可以完成 - 但是你的函数应该返回一个int。

int foo(void) { return 1; } 

int main(void) 
{ 
    switch(foo()) { 
    case 0: 
      printf("foo\n"); 
      break; 
    case 1: 
      printf("bar\n"); 
      break; 
    default: 
      break; 
    } 
    return 0; 
} 

至于,可以看出这个编译运行。

[09:36 PM] $ gcc -Wall -Werror switcht.c -o switcht 
[09:36 PM] $ ./switcht 
bar 
[09:36 PM] $ 

但是,如果你的函数返回int以外的任何东西,那么它不会编译。例如,如果foo()返回float

float foo(void) { return 1.0; } 

然后:

[09:44 PM] $ gcc -Wall -Werror switcht.c 
switcht.c: In function ‘main’: 
switcht.c:7:9: error: switch quantity not an integer 
switch(foo()) { 
    ^~~~~~ 
[09:44 PM] $ 
+0

OP的问题中没有第三种情况。直接翻译宁可'case 0:/ *做某事*/break;默认:/ *做别的事*/break;'。 – dxiv

+0

该问题缺少该函数的声明。你展示了一个(错误的)模式,并对其余的进行推测。 – Olaf