что такое подпрограмма? - PullRequest
15 голосов
/ 27 октября 2010

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

Ответы [ 3 ]

19 голосов
/ 27 октября 2010

Подпрограмма-заглушка может быть одной из (по крайней мере) двух вещей.


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

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.

9 голосов
/ 27 октября 2010

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

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

    return 0;
}

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

0 голосов
/ 20 августа 2012

На языке C заглушка фактически вызывает main (), а не ОС или компилятор.

...