Successivo: , Su: Variabili dell'estensione API   [Contenuti][Indice]


17.4.13.1 Costanti e variabili della versione dell’API

L’API fornisce sia un numero di versione “principale” che uno “secondario”. Le versioni dell’API sono disponibili al momento della compilazione, come definizioni per il preprocessore C, a supporto della compilazione condizionale, e come elencazione di costanti per facilitare il debug:

versione APIDefiniz. Preprocessore CCostante di elenco
Majorgawk_api_major_versionGAWK_API_MAJOR_VERSION
Minorgawk_api_minor_versionGAWK_API_MINOR_VERSION

Tabella 17.3: Costanti delle versioni API gawk

La versione secondaria aumenta quando nuove funzioni sono aggiunte all’API. Tali nuove funzioni sono sempre aggiunte alla fine della struttura struct dell’API.

La versione principale aumenta (e la versione secondaria torna a zero) se qualche tipo di dati cambia dimensione o si modifica l’ordine dei campi, o se qualcuna delle funzioni esistenti cambia il livello di versione.

Può capitare che un’estensione sia stata compilata con una versione dell’API ma caricata da una versione di gawk che ne usa una differente. Per questo motivo, la versione principale e quella secondaria dell’API della versione in uso di gawk sono incluse nella struttura struct dell’API come costanti intere in sola lettura:

api->major_version

La versione principale di gawk in esecuzione.

api->minor_version

La versione secondaria di gawk in esecuzione.

Dipende dall’estensione decidere se ci sono incompatibilità con l’API. Tipicamente, basta un controllo di questo tipo:

if (   api->major_version != GAWK_API_MAJOR_VERSION
    || api->minor_version < GAWK_API_MINOR_VERSION) {
        fprintf(stderr, "estensione_pippo: discordanza di versione \
con gawk!\n");
        fprintf(stderr, "\tLa mia versione (%d, %d), versione gawk \
(%d, %d)\n",
                GAWK_API_MAJOR_VERSION, GAWK_API_MINOR_VERSION,
                api->major_version, api->minor_version);
        exit(1);
}

Questo codice è incluso nella macro generica dl_load_func() presente in gawkapi.h (trattata in Codice predefinito di interfaccia API).


Successivo: , Su: Variabili dell'estensione API   [Contenuti][Indice]