Это означает, что коды ошибок, возвращаемые функциями, ничего не вызывают, если они явно не обработаны вызывающей стороной.
Рассмотрим следующий псевдокод, определяющий функцию:
int f ()
{
...
if (/* some condition that indicates an error */) {
return 1;
}
else {
return 0;
}
}
Если вы сейчас просто вызовите функцию f
, и произошла ошибка, ничего не произойдет, если вы явно не проверите, если возвращаемое значение указывает на ошибку. В зависимости от характера ошибки, программа, вероятно, продолжит работу в ошибочном состоянии.
Кроме того, все вызывающие код, вызвавшие функцию, не будут уведомлены об этой ошибке, если она явно не будет им возвращена. Это то, что означает "пузыриться". Чтобы проиллюстрировать это, рассмотрим другую функцию, вызывающую первую функцию без проверки на наличие ошибок:
int g ()
{
...
f();
...
}
Теперь любой вызывающий абонент, вызывающий g
, также не получит никакого признака сбоя f
. Это может быть хорошо, если ошибка не влияет на вычисления g
и ни на состояние программы в целом. Но если пропущенная обработка происходит из-за ошибки (или лени) программиста и ставит под угрозу результат g
(и, возможно, что-либо выше этого в стеке вызовов или во всей программе), никто никогда не будет уведомлен.
За исключением, все наоборот. Если с ними явно не обращаются, они передаются от вызывающего к вызывающему, то есть пузыриваются в стеке вызовов - думайте о воздушных пузырьках в воде, они пузыриваются.