2010-10-27 5 views

Répondre

16

Un sous-programme peut être l'un des deux éléments (au moins).


En premier lieu, il peut être une routine lieu-support qui vous développez rapidement pour tester une routine de niveau supérieur, avec l'intention de substituer une version réelle plus tard. Ceci est généralement utilisé avec le développement de haut en bas (coder les premier travail, votre plus hauts niveaux en bas à l'étoffe plus détaillée) et peut être aussi simple que:

int getCount (void) { return 7; } // just return fixed value for testing. 

ou un peu plus complexe:

// 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]; 
} 

bien sûr, une fois que le talon devient assez complexe, vous pouvez aussi bien mettre en œuvre juste la vraie chose :-)


en second lieu, il est communément utilisé dans l'appel de procédure distante (RPC) environnem ents. Un bout est utilisé pour rassembler les données à une extrémité et les communiquer à un serveur à l'autre extrémité. RPC doit créer des fonctions de remplacement pour le client et un serveur. Il est très similaire à un prototype de fonction en C, mais le résultat final est légèrement différent, comme:

+----------------+ 
| Client   | 
| +----------+ | +---------------+ 
| | main | | | Server  | 
| |----------| | | +----------+ | 
| | stub_cli |------->| stub_svr | | 
| +----------+ | | |----------| | 
+----------------+ | | function | | 
        | +----------+ | 
        +---------------+ 

Dans cet exemple, au lieu d'appeler function dans le même programme, main appelle une fonction stub client (avec le même prototype comme function) qui est responsable de l'emballage de l'information et de le passer à travers le fil à un autre processus. Cela peut être la même machine ou une machine différente, cela n'a pas vraiment d'importance - l'un des avantages de RPC est de pouvoir déplacer les serveurs à volonté.

Sur le serveur, un processus d'écoute reçoit ces informations et les transmet au serveur. Le talon du serveur reçoit les informations, les déballe et les transmet à la fonction réelle.

La fonction réelle fait alors ce dont elle a besoin et retourne au talon du serveur qui peut emballer les informations de retour et les renvoyer au talon du client.

Le talon du client décompresse ensuite celui-ci et le renvoie à main.

+0

Super réponse, merci beaucoup :) –

7

C'est une fonction avec la même signature que la fonction réelle mais elle ne fait rien, et peut être compilée et exécutée comme la vraie chose. par exemple. Ils sont souvent utilisés comme des espaces réservés, de sorte que la structure globale du programme peut être élaborée en premier, puis les détails.

0

En langage C, le code Stub appelle réellement le main(), pas le système d'exploitation ou le compilateur.

+0

Voulez-vous dire le code de démarrage? Je n'ai pas entendu parler du code stub utilisé dans ce contexte. – paxdiablo

Questions connexes