2010-02-28 16 views
8

Dove posso trovare qual è la lunghezza massima dell'identificatore in C?Lunghezza massima identificatore

In quale file di intestazione è specificato questo limite?

+0

Perché desideri utilizzare identificatori così lunghi che questo sia importante? – Tronic

+3

@Tronic, in C89 sei limitato a 6 caratteri significativi per identificatori esterni. –

risposta

21

Non esiste un file di intestazione che contenga il limite di lunghezza dell'identificatore; anche se ci fossero, come potrebbe aiutarti? Non è possibile modificare le lunghezze degli identificatori in fase di compilazione in base comunque a un valore in un file di intestazione.

La C standard, sezione 5.2.4.1 dice:

  • 63 significativi personaggi iniziali in un identificatore interno o un nome di macro (ogni nome carattere universale o un carattere sorgente estesa è considerato un singolo carattere)
  • 31 caratteri iniziali significativi in ​​un identificatore esterno (ogni nome di carattere universale che specifica un identificativo breve di 0000FFFF o inferiore è considerato 6 caratteri, ogni nome di carattere universale che specifica un identificativo breve di 00010000 o più è considerato 10 caratteri e ogni carattere di fonte esteso è conside rosso lo stesso numero di caratteri come nome carattere universale corrispondente, se presente)

Esso contiene anche una nota:

Implementazioni dovrebbe evitare di imporre limiti fissati traduzione quando possibile.

Quindi è necessario controllare la documentazione per vedere se il compilatore supporta un numero maggiore di caratteri significativi negli identificatori.

+0

In quale file di intestazione è specificato quel limite? – Devel

+0

Non si trova in un file di intestazione, è nella documentazione del compilatore. Gli identificatori scompaiono al momento dell'esecuzione. –

+0

@Devel, non esiste una cosa del genere. Anche se ci fossero, come ti aiuterebbe? Non è possibile modificare le lunghezze degli identificatori in base a un file di intestazione, vero? –

8

Non c'è un'intestazione che ti dice. Devi prendere una decisione informata in base alle piattaforme su cui probabilmente eseguirai il porting. Carl Norum ha sottolineato cosa dice lo standard C99.

Una volta, si poteva contare solo su 6 caratteri univoci, mono-caso, per variabili esterne - perché era quello che alcuni ambienti mainframe fornivano. (Questo è ciò che ha detto la norma C89), ma ha notato che la limitazione era dolorosa)

In questi giorni, in parte a causa del collegamento sicuro al tipo in C++, è possibile fare affidamento su nomi molto più lunghi per i simboli esterni. Se inizi ad andare alla deriva sopra i 31 caratteri, potresti incontrare dei problemi, ma anche i problemi di leggibilità.

+0

+1 per C89 con solo 6 caratteri per identificatori esterni. –

3

In breve, non esiste alcun file di intestazione per dirvi che fa parte delle specifiche ANSI/ISO C Standard che definisce il layout della sintassi e del meccanismo di ambiente per il linguaggio C stesso. Negli standard pre C89, la lunghezza massima dell'identificatore era 6, a causa delle piccole impronte di memoria e dell'ambiente su tali sistemi come i mainframe e i sistemi * nix.

Oggi lo standard più recente è C99 che stabilisce che la lunghezza massima per un identificatore deve essere 32, il motivo è piuttosto semplice e logico ... il compilatore funziona analizzando il flusso di input che verrà passato come argomento della riga di comando, makefile o una soluzione (per ambienti Microsoft Visual Studio), il parser è rigido e fisso e quindi le restrizioni imposte sulla lunghezza dell'identificatore in modo che il parser possa guardare avanti e vedere se ci sono altri caratteri. È giù per quella ragione per questo.

Un'altra ragione è che la maggior parte dei compilatori C++ utilizza il nome di mangling sugli identificatori che, come Jonathan Leffler ha sottolineato, potrebbe confondere il compilatore e anche il collegamento del codice.

Spero che questo aiuti, Cordiali saluti, Tom.