Ответ 1
Процедура заглушки может быть одной из (по крайней мере) двух вещей.
Во-первых, это может быть обычная процедура, которую вы быстро разрабатываете, чтобы протестировать процедуру более высокого уровня, с намерением позже заменить настоящую версию. Обычно это используется при разработке сверху вниз (сначала кодируя более высокие уровни, а затем прокладывая путь до более подробного материала) и может быть таким же простым, как:
int getCount (void) { return 7; } // just return fixed value for testing.
или немного сложнее:
// Cycle through values for some variety.
int getCount (void) {
int retvals[] = {2,7,1,8,2,8,1,8,2,8,4,5,9};
static int pos = -1;
pos = (pos + 1) % (sizeof (retvals) / sizeof (*retvals));
return retvals[pos];
}
Конечно, как только заглушка станет достаточно сложной, вы можете просто реализовать реальную вещь: -)
Во-вторых, он обычно используется в средах удаленного вызова процедур (RPC). Штук используется для сортировки данных на одном конце и передачи его серверу на другом конце.
RPC необходимо создать функции заглушки для клиента и сервера. Он очень похож на прототип функции в C, но конечный результат немного отличается, например:
+----------------+
| Client |
| +----------+ | +---------------+
| | main | | | Server |
| |----------| | | +----------+ |
| | stub_cli |------->| stub_svr | |
| +----------+ | | |----------| |
+----------------+ | | function | |
| +----------+ |
+---------------+
В этом примере вместо вызова function
в той же программе main
вызывает функцию заглушения клиента (с тем же прототипом, что и function
), который отвечает за упаковку информации и ее передачу через провод к другому процессу. Это может быть одна и та же машина или другая машина, это не имеет большого значения - одно из преимуществ RPC - возможность перемещать серверы по своему усмотрению.
На сервере есть процесс "прослушиватель", который получит эту информацию и передаст ее на сервер. Серверная заглушка получает информацию, распаковывает ее и передает ее в реальную функцию.
Реальная функция выполняет то, что ей нужно, и возвращается к серверной заглушке, которая может упаковывать возвращаемую информацию и передавать ее обратно на заглушку клиента.
Затем заглушка клиента распаковывает и возвращает его обратно в main
.