Что такое заглушка?

Что касается C, то что такое заглушка? Также был бы весьма полезен и пример.

Ответы

Ответ 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.

Ответ 2

Это функция с той же сигнатурой, что и действительная функция, но она ничего не делает и может быть скомпилирована и выполнена так же, как и настоящая вещь. например.

int MyStub(char * str)
{
    /* Stub - Does Nothing */

    return 0;
}

Они часто используются в качестве заполнителей, поэтому сначала можно разработать общую структуру программы, а затем детали.

Ответ 3

В языке C код Stub фактически вызывает main(), а не OS или компилятор.