2016-08-30 2 views
0

Ich hatte über access links aus Wikipedia, aber ich konnte nicht ein klares Bild davon erhalten, welche Zugriffslinks sind und wie sie sich von der Rückadresse einer Funktion unterscheiden. Kann jemand kurz erklären, was ein Zugriffslink ist und warum er auf einem Call-Stack notwendig ist?Was ist ein Zugriffslink auf einem Stapelrahmen?

+2

Solange Sie C verwenden, gibt es keine Zugangsverbindungen. –

+0

Wikipedia sagt, wenn wir Unterroutinen verschachtelt haben, haben wir Zugriffsverknüpfungen und C unterstützt verschachtelte Subroutinen, also sollten wir Zugriffsverknüpfungen in C haben, richtig? – vikkyhacks

+1

Sie werden nicht in C unterstützt. Ihr Compiler kann sie als Erweiterung haben, aber dann sind sie eine Erweiterung zu C, nicht C. –

Antwort

3

Sie würden tatsächlich solche Paradigma in Pascal oder Java, zum Beispiel, nicht in C erfüllen.

Zum Beispiel in Java, können Sie erklären:

void func1() { 
    int outer = 2; 
    int func2() { 
     int inner = 3; 
     return inner+outer; 
    } 
    int result = func2(); 
} 

Am Ende func1 Ausführung, die result Variable würden 5 enthalten, die eine Summe von lokal definierten Variablen sind outer und inner.

Die access link dient genau diesem Zweck - den "Zeiger" zum eigentlichen äußeren Umfang in die innere Funktion zu übergeben.

Der gcc Compiler hat Nested Functions extension, die nicht Teil des C Standard ist als n.m erwähnt

+0

Ich kopierte den obigen Code und lief in C, kompilierte und gab die richtige Ausgabe, warum Sie sagen, dass dies in C nicht unterstützt wird? – vikkyhacks

+0

Was 'C' Compiler verwenden Sie? – Serge

+0

Ich benutze gcc, ich lief mit 'gcc -std = gnu99 -g -Wall -m32 dateiname.c' – vikkyhacks