Perché le brutte parole chiave in C11?

15

Attualmente sto leggendo una bozza della specifica C11. Le nuove parole chiave introdotte: _Bool, _Alignof, _Atomic sembrano tutte estensioni personalizzate, anziché parole chiave riservate standard come struct, union, int .

Mi rendo conto che lo standard consiste fondamentalmente in estensioni standardizzate ... ma comunque, è terribile! Forse finiremo presto con __Long_Long_Reallylong_Integer_MSVC_2020_t strisciante nello standard!

La compatibilità con le versioni precedenti del codice non standard è l'unica ragione del nuovo stile delle parole chiave?

    
posta Vorac 07.05.2013 - 15:06
fonte

2 risposte

20

Immagino che la compatibilità all'indietro con il codice perfettamente standard sia una ragione più importante.

Se aggiungi una parola chiave che potrebbe essere stata usata come identificatore legittimo nel codice precedente, crei un sacco di dolore, di possibili errori sottili, specialmente in C, una lingua con regole di analisi complicate.

Se questi identificatori sono stati usati come interfaccia pubblica da qualche parte, si aggiunge dolore a tutti gli utenti di tali sfortunate librerie, che potrebbero non usare C, ma chiamare la libreria da Ruby, o Python, ecc.

Questo è il motivo per cui le nuove parole chiave sono destinate a sembrare meno belle parole e più simili a hack bolt-on che le persone hanno minori possibilità di utilizzare già per un altro scopo.

    
risposta data 07.05.2013 - 15:20
fonte
8

I nomi che iniziano con un trattino basso e una lettera maiuscola (e qualsiasi cosa con doppio trattino basso) erano riservati all'implementazione di compilatori / librerie standard nei precedenti standard.

Da Identificatori riservati di C89 e C99:

Also reserved for the implementor are all external identifiers beginning with an underscore, and all other identifiers beginning with an underscore followed by a capital letter or an underscore.

Quindi, in teoria, quelle nuove parole chiave non dovrebbero essere in uso in alcun codice scritto prima e ciò porta a una migliore compatibilità con le versioni precedenti di qualsiasi nome semplice, che è probabilmente l'unica ragione.

    
risposta data 07.05.2013 - 16:03
fonte

Leggi altre domande sui tag