2010-06-22 14 views
5

K & R dice:collegamento esterno in C

da variabili esterne predefinite e le funzioni hanno la proprietà che tutti i riferimenti a loro con lo stesso nome, anche da funzioni compilati separatamente, sono i riferimenti a stessa cosa

si prega di spiegare che cosa questo significa, non capisco che

+3

Scusami, sei nuovo di c? Secondo me, K & R non è un libro introduttivo adatto per i principianti. – yehnan

+0

Tuttavia, fare lo sforzo per capire K & R ti darà una buona conoscenza di C. Dico che tienilo d'occhio. –

+1

Non sono contro la domanda. Ho notato che l'ashma aveva fatto molte domande. Sinceramente desidero che possa usare un libro più appropriato per lui/lei. – yehnan

risposta

5

Consideriamo due funzioni:

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

Quindi le persone che fanno riferimento a extern_sqr faranno riferimento a tale funzione. Questo è in contrasto con il collegamento static, in cui solo le persone all'interno della "unità di traduzione" (approssimativamente il file è definito) possono accedere alla funzione static_dbl.

Si scopre che il extern è implicito per impostazione predefinita in c. Quindi, si otterrebbe lo stesso comportamento, se hai scritto:

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

più recente standard C richiedono ancora una "dichiarazione di funzione", così, di solito in un file di intestazione da qualche parte, si incontrano:

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

che dice "da qualche parte, in qualche altra unità di traduzione, ho una funzione chiamata extern_sqr.

La stessa logica si applica alle variabili.

+1

Si può anche aggiungere che nella dichiarazione della funzione, i nomi delle variabili sono opzionali come si può vedere int extern_sqr (int); invece. – Maximus

+1

@Maximus: modificato, grazie. Potrei anche entrare nei tipi di parametro essendo _completamente_ opzionale, a seconda di quale standard, ma perché confondere le cose :) – Stephen

0

esterna Vari Gli attributi e le funzioni sono globali, ovvero mantengono gli stessi valori (per le variabili) o definizioni (per le funzioni) anche quando vengono richiamati da diversi file * .c all'interno del programma.

Problemi correlati