В функции есть два оператора возврата и какой оператор возврата будет выполнять? - PullRequest
0 голосов
/ 25 июня 2018
int main()
{  
   int f=fun();
   ...
}
int fun()
{
   return 1;
   return 2;
}

В приведенной выше программе, когда функция вызывается из главной функции и функция содержит два оператора возврата,

  1. Будут ли выполняться оба оператора возврата?или же
  2. Если выполняется только одна инструкция возврата, почему?Тогда как насчет другого оператора возврата, независимо от того, выполняется он или нет?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Если вы помните, что оператор return соответствует коду операции сборки, например RTS («возврат из подпрограммы»), который устанавливает значение счетчика программ с адресомИнструкция после вызова, очевидно, что второй оператор возврата никогда не выполняется.

0 голосов
/ 25 июня 2018

Управление программой никогда достигает return 2;, и оптимизирующий компилятор удалит его.

Единственный известный мне язык, который настолько безумен, чтобы иметь два доступных оператора return, - это Java:

try {
    return 1; // this is evaluated
} finally {
    return 2; // this is the one actually returned
}
...