Mi chiedo quanto siano diversi i preprocessori per C ++ e C.
La ragione della domanda è questa domanda su una domanda specifica del preprocessore in cui il paragrafo dello standard che indirizza la domanda ha una formulazione diversa (e un numero di paragrafo diverso) e anche la differenza riguardante le parole chiave true
e false
in C ++.
Quindi, ci sono più differenze o questa è l’unica differenza.
Un’estensione della domanda sarebbe quando un file sorgente viene emesso in modo diverso da un preprocessore C ++ e da un preprocessore C.
Il preprocessore C ++ 03 è (almeno destinato a essere) simile al preprocessore C prima di C99. Sebbene i numeri di testo e di paragrafo siano leggermente diversi, le uniche differenze tecniche di cui sono a conoscenza tra i due sono che il preprocessore C ++ gestisce i grafi e i nomi dei caratteri universali, che non sono presenti in C.
A partire da C99, il preprocessore C ha aggiunto alcune nuove funzionalità (ad esempio, macro variadic) che non esistono nella versione corrente di C ++. Non ricordo per certo, ma non credo che siano stati aggiunti i digrammi.
Credo che C ++ 0x riporterà i due in linea (almeno questo è l’intento). Ancora una volta, i numeri e la formulazione del paragrafo non saranno identici, ma credo che l’intento sia che dovrebbero funzionare allo stesso modo (a parte conservare le differenze sopra menzionate).
Dovrebbero essere uguali: C ++ 98 e C ++ 03 dovrebbero corrispondere a C90 e C ++ 0x dovrebbe corrispondere a C99. Ci possono essere bug nel testo, però.
Le macro predefinite differiscono tra i preprocessori, principalmente per ovvie differenze nelle caratteristiche del linguaggio. Ad esempio confrontare:
In particolare:
__cplusplus
, il C ++ lo usa per rappresentare la versione __STDC__
per rappresentare la versione, C ++ dice che è stata definita l’implementazione e usa invece __cplusplus
__STDC_IEC_559__
e __STDC_IEC_559_COMPLEX__
per indicare le caratteristiche in virgola mobile, C ++ no e sembra sostituirlo con le costanti per tipo std::numeric_limits::is_iec559
__STDCPP
: _STDCPP_STRICT_POINTER_SAFETY__
e __STDCPP_THREADS__
Come accennato da DevSolar, C11 ha aggiunto molte altre definizioni che non fanno parte di C ++ 11.