2010-06-22 12 views
5

K & R sagt:externe Bindung in C

standardmäßig externe Variablen und Funktionen haben die Eigenschaft, dass alle Verweise auf sich mit dem gleichen Namen, auch von Funktionen separat kompilieren, sind Verweise auf gleiche Sache

Bitte erläutern sie, was das bedeutet, verstehe ich es zwei Funktionen nicht

+3

Entschuldigung, bist du neu in c? Meiner Meinung nach ist K & R kein geeignetes Einführungsbuch für Anfänger. – yehnan

+0

Wenn Sie sich jedoch bemühen, K & R zu verstehen, werden Sie C wirklich gut verstehen. Ich sage: Bleiben Sie dran. –

+1

Ich bin nicht gegen die Frage. Ich bemerkte, dass Ashma mehrere Fragen gestellt hatte. Ich wünsche Ihnen aufrichtig, dass er ein geeigneteres Buch für Sie verwenden kann. – yehnan

Antwort

5

Bedenken sie:

extern int extern_sqr(int i) { return i * i; } 
static int static_dbl(int i) { return i * 2; } 

Dann beziehen sich Personen, die sich auf extern_sqr beziehen, auf diese Funktion. Dies steht im Gegensatz zu static Verknüpfung, wo nur Personen aus der "Übersetzungseinheit" (grob gesagt die Datei, die es definiert ist) Zugriff auf die Funktion .

Es stellt sich heraus, dass die extern standardmäßig in c implizit ist. So würde man das gleiche Verhalten erhalten, wenn Sie schreibt:

int extern_sqr(int i) { return i * i; } 

Neuere C-Standards erfordern nach wie vor eine "Funktionsdeklaration" so, in der Regel in einer Header-Datei irgendwo, werden Sie feststellen:

int extern_sqr(int i); // Note: 'i' is optional 

Welche „irgendwo, in einer anderen Übersetzungseinheit sagt, habe ich eine Funktion extern_sqr genannt.

Die gleiche Logik auf Variablen gilt.

+1

Sie können auch hinzufügen, dass die Variablennamen in der Funktionsdeklaration optional sind, wie Sie sehen können int extern_sqr (int); stattdessen. – Maximus

+1

@Maximus: bearbeitet, danke. Ich könnte auch in Parametertypen gehen, die _completely_ optional sind, abhängig davon, welcher Standard, aber warum Dinge verwirren :) – Stephen

0

externen Vari Fähigkeiten und Funktionen sind global, d. h. halten dieselben Werte (für Variablen) oder Definitionen (für Funktionen), selbst wenn sie von verschiedenen * .c-Dateien in Ihrem Programm aufgerufen werden.