C usa "$"?

6

Come regola generale, i linguaggi di programmazione sono progettati per essere utilizzati dagli esseri umani, e quindi per l'accesso usando un US-QWERTY tastiera. (Questo rende un certo numero di salti concettuali, io stesso come prova di come sto facendo la maggior parte del lavoro su un BE-AZERTY, ma concedimi e unisciti a me in questo atto di fede.)

Usando le lettere dell'alfabeto per parole e identificatori riservati, ha senso assegnare i diversi caratteri di punteggiatura a una funzione nella lingua che si verificherà con una probabilità in correlazione con la facilità di accesso del segno di punteggiatura. (C'è una storia su trigraph s relativa a questo, ma non pertinente a questa domanda.)

C'è una storia da qualche parte sulla selezione di = per l'assegnazione e == per il confronto a causa dell'economia della memoria, ma non riesco a trovare un indirizzo di collegamento ipertestuale adatto.

Applicare ulteriormente questa teoria alla pratica, con la sintassi del linguaggio C:

  • ! per "non"
  • " per valori letterali stringa
  • # per l'input del compilatore e del preprocessore

La teoria si rompe a $ . Non sembra affatto da alcuna implementazione del linguaggio C, che io sappia. (Inoltre, nessun $ qui .)

Era riservato a qualcosa che non era finito?
Era in uso da qualcosa che da allora è diventato inutilizzabile?
O ha un uso in (alcune) implementazioni che non sono di uso comune?

    
posta Stijn Sanders 01.02.2017 - 14:24
fonte

1 risposta

6

Le cose non sono così chiare. GCC concede effettivamente $ nei nomi degli identificatori e il manuale dice che questo è dovuto al fatto che molte implementazioni tradizionali lo fanno. Penso che MSVC faccia lo stesso. In realtà è lo standard ANSI che vieta $ , e quello standard è venuto un po 'più tardi rispetto all'invenzione di C. E dal C99, anche lo standard consente altri caratteri "definiti dall'implementazione" negli identificatori.

La situazione è quindi estremamente complicata:

  • Lo standard dice "no", ma lascia un buco di loop per i singoli compilatori per rispondere "sì"
  • Le implementazioni ampiamente utilizzate rispondono "sì", ma passano a "no" quando si utilizza la modalità "ANSI", il che implica che "sì" violerebbe lo standard.

Per quanto ne so, il motivo per cui $ ha uno status così dubbio è che gli scrittori di compilatori amavano usarlo nel codice intermedio come un modo semplice per garantire che i loro identificatori segreti non si scontrassero mai con identificatori visibili al programmatore. (Il C ++ era originariamente implementato in C: i primi compilatori C ++ erano in realtà transcompiler in C, e avevano bisogno di lotti di identificatori segreti.)

    
risposta data 02.05.2017 - 13:52
fonte

Leggi altre domande sui tag