возможно ли писать операторы после возврата?
Можно и допустимо написать больше операторов после возврата.С gcc и Clang я не получаю предупреждения, даже с переключателем -Wall
.Но Visual Studio выдает warning C4702: unreachable code
для этой программы.
Оператор return
завершает текущую функцию, будь то main
или другая функция.
Даже если запись действительна, если код после return
недоступен, компилятор может исключить его из программы в соответствии с как если бы правилом .
У вас может быть условный оператор return
, и вы можете иметь несколько операторов return
.Например:
int main() {
bool all_printed{false};
cout << "Hello" << endl;
if (all_printed)
return 0;
cout << "Bye" << endl;
all_printed = true;
if (all_printed)
return 0;
}
Или вы можете использовать goto
до и после возврата и некоторые метки для выполнения оператора return
после второго вывода:
int main() {
cout << "Hello" << endl;
goto print;
return_here:
return 0;
print:
cout << "Bye" << endl;
goto return_here;
}
Отпечатки:
Hello
Bye
Другое решение, связанное с этим ответом , заключается в использовании RAII для печати после возврата:
struct Bye {
~Bye(){ cout << "Bye" << endl; } // destructor will print
};
int main() {
Bye bye;
cout << "Hello" << endl;
return 0; // ~Bye() is called
}