Скажем, у меня есть встроенная функция, такая как эта:
inline double CalculateValue() {
// some condition
if (true) {
// some other condition
if (true) {
// another condition
if (true) {
return 1.0;
}
// somethings
std::cout << "inside1" << std::endl;
}
// somethings
std::cout << "inside2" << std::endl;
}
return 2.0;
}
void Process() {
double value = CalculateValue();
value *= 100.0;
std::cout << value << std::endl;
}
int main ()
{
Process();
}
Он «скопирует и вставит» функцию CalculateValue()
в функцию Process()
. Результат 100
, как и ожидалось.
Но если я попытаюсь подражать тому, как будет выполняться это "копирование и вставка", что-то я не понимаю:
void Process() {
double value;
// some condition
if (true) {
// some other condition
if (true) {
// another condition
if (true) {
value = 1.0;
return;
}
// somethings
std::cout << "inside1" << std::endl;
}
// somethings
std::cout << "inside2" << std::endl;
}
value = 2.0;
value *= 100.0;
std::cout << value << std::endl;
}
int main ()
{
Process();
}
Конечно, когда он достигает оператора return
, остальную часть функции следует игнорировать (т. е. inside1
и inside2
никогда нельзя печатать), поскольку return
. Но если я return
из родительской функции (Process()
), она немедленно возвращается, поэтому я никогда не увижу 100
.
Это означает, что он делает это по-другому.
Как компилятор справляется с этой ситуацией? Я пытался создать блок кода, но return
все равно возвращается к основной функции...
goto
не зло для программирования? :) 02.03.2017if-then-else
?goto
не плох сам по себе (как нож), только его использование может быть хорошим или плохим. 02.03.2017