Компилятору разрешено выполнять все виды преобразований кода во время компиляции.Например, компилятор может преобразовать функцию foo
в
int foo(int i)
{
int rv;
if (i > 0)
{
rv = i - 1;
goto end;
}
rv = i + 1;
end:
return rv;
}
. Затем этот код можно вставить в вызывающую программу.Во время вставки компилятор вводит переменные для обработки параметров и возвращаемого значения встроенной функции.Результат выглядит примерно так, как показано ниже:
int foo_rv;
int foo_param_i = k;
{
int i = foo_param_i;
if (i > 0)
{
rv = i - 1;
goto end:
}
rv = i + 1;
end:
foo_rv = rv
}
int result = foo_rv;
Этот код затем может быть дополнительно оптимизирован компилятором, в результате чего код ниже
{
if (k > 0)
{
result = k - 1;
goto end:
}
result = k + 1;
end:
}