зачем нам писать в конце функцию «возврат»? в с ++ - PullRequest
0 голосов
/ 18 января 2012

Может кто-нибудь объяснить мне, что это за «возврат» в конце функции и почему мы должны писать в конце основной функции, возвращать 0.e.g

int main()
 {
  .....
  return 0;
 }

Ответы [ 2 ]

6 голосов
/ 18 января 2012

Вы не должны написать return в конце main на C ++;возвращаемое значение 0 неявно.(Это отличается в C, где вы должны возвращать значение.)

Это возвращает значение в среду программы, чтобы можно было узнать, была ли программа успешной (ноль) или встречаласьнекоторая ошибка (отличная от нуля).Другие программы, в том числе сценарии оболочки / командные файлы, могут использовать эту информацию для принятия решений, например, они могут остановиться рано, когда в программе, которую они запускают, возникает ошибка.

0 голосов
/ 18 января 2012

Все процессоры, поддерживающие вызовы функций, имеют инструкцию, подобную RET, для явного возврата из вызываемой функции обратно к коду, который вызвал функцию.Адрес памяти кода, к которому необходимо вернуться после того, как вызов функции уже был сохранен в «хорошо известном месте» (например, в стеке).Инструкция RET извлечет этот адрес памяти и укажет центральный процессор в правильном месте, чтобы возобновить выполнение кода, который идет после исходного вызова функции.

В c ++ некоторые функции объявлены как "возвращают "определенные значения (как функция main выше), в то время как другие функции никогда не возвращают никаких значений (те, которые объявлены как имеющие возвращаемый тип void).Это ваш выбор, как вы объявляете функции, которые вы пишете.Если тип возвращаемого значения функции void, вам не понадобится явный оператор возврата в вашем коде, , если вы не возвращались преждевременно, как внутри цикла if, else или.Например:

void foo(int x) {
    if (x == 0)
        return; // premature return to caller

    int b = x*2;
    // do some more stuff
    // and now no need to say return, its done implicitly because we are at function end
}

Однако, когда ваша функция объявлена ​​как имеющая тип возврата, отличный от void (например, int), вы должны иметь явный оператор возврата в функции, даже если вы не преждевременный возврат.

int bar(int y) {        
    return y*7;
}

, потому что вызывающая сторона ожидает его и может присвоить возвращаемое значение переменной следующим образом:

int z = bar(4);
...