- Should I stop using the term C/C++?
Assolutamente. Non è chiaro che cosa intende esprimere questo costrutto, tranne, forse, la confusione su cosa siano C e C ++ per conto della persona che usa il termine.
Poiché questa confusione è una fonte comune di frustrazione, molte persone sono diventate piuttosto emotive e l'aspetto di quel termine da solo sarà una ragione sufficiente per far sì che diventino negativi riguardo al tuo contributo. Questo potrebbe sembrare sciocco, ma sembra essere quello che abbiamo.
Raccomando che invece di parlare di "C / C ++" usi un termine che in realtà chiarisca cosa intendi.
-
Se stai parlando di qualcosa in C che potrebbe o potrebbe anche non essere vero per C ++, dì semplicemente C .
Example: How should the main
function be declared in C?
At first, it might seem that the answer for C++ is the same: int main()
or int main(int, char**)
. But as the discussion goes on, it might be relevant to point out that in C++, the function has to be declared at global scope, which doesn't make sense in C, because it has no namespace
s. On the other hand, C allows calling main
recursively while C++ doesn't. In C++, there is an implicit return 0;
if you “fall off” main
but in C the return
statement is required on any path. The list goes on and it makes the discussion much simpler if you make it clear up front what the language to be discussed is.
-
Se stai parlando di qualcosa in C ++ che potrebbe anche non essere vero per C, dì semplicemente C ++ .
Example: Will a malloc()
ed array of int
s initially be all-zeros in C++?
The short answer for C happens to be the same: no. But as the answer goes on, it might be worthwhile to point out that in C, calloc
would be a good alternative while in C++, using a std::vector<int>
might have been a better choice in the first place.
-
Se vuoi segnalare una somiglianza tra C e C ++, dì C e C ++ .
Example: In C and C++, the sizeof
an int
is implementation defined and may vary between compilers and architectures.
Here, we want to point out that C and C++ behave the same way. We are explicitly talking about both languages.
In realtà ti raccomando di essere ancora più specifico e non solo parlare di "C" o "C ++" ma della versione precisa. Entrambe le lingue si stanno evolvendo e un'affermazione blunt come
C++ supports /* … */
and // …
comments while C only supports the /* … */
style.
non è giusto né sbagliato.
- If the answer to #1 is yes, how would I call a program that use a mix of C and C++?
Poiché le lingue si sovrappongono, ogni programma C conterrà parti che potrebbero sembrare C ++ e viceversa. Ciononostante, gli autori si saranno probabilmente basati su un compilatore C o C ++. Quindi dì "il programma è scritto in C " se è compilato con un compilatore C e "il programma è scritto in C ++ " se usano un compilatore C ++, anche se potrebbero rifiutarsi di utilizzare qualsiasi funzionalità C ++ moderna. Alcune persone si riferiscono a tale codice C ++ come C-style C ++ . Assenza di sovraccarico, eccezioni, polimorfismo, modelli e flussi I / O sono caratteristiche comuni di tale codice.
Se, invece, alcuni file sono scritti in C e compilati con un compilatore C e alcuni altri file sono scritti in C ++ e compilati con un compilatore C ++, e quindi i file oggetto collegati insieme, I direi che "il programma è scritto in un mix di C e C ++ " come, infatti, lo hai già fatto.
Tuttavia, se, invece, gli autori si sono premurati di scrivere ogni singolo file in modo tale da poterlo compilare con un compilatore C o e il programma risultante farebbe il stessa cosa, si potrebbe dire che "il programma è scritto in un sottoinsieme comune di C e C ++ ".
Quest'ultimo è spesso il caso per i file di intestazione che dovrebbero essere condivisi tra codice C e C ++. A proposito, scrivere questo codice non è semplice. Se si desidera sottolineare ulteriormente che sono stati utilizzati solo tali costrutti validi in C e C ++ e sono ampiamente supportati da diversi produttori di compilatori, il termine a portatile comune sottoinsieme di C e C ++ può essere usato per sottolineare questo.
- Given that both of them are “different” languages is it likely that at some point C++ compilers stop supporting code written in the C language (since modern C++ is diverging from the C mentality for basic stuff like pointers, dynamic memory handling, etc)?
Non sono sicuro di aver capito questa domanda. Poiché C e C ++ sono lingue diverse, non ci si può aspettare che un compilatore per uno di essi accetti un programma scritto per l'altro. Tuttavia, i compilatori sono spesso progettati in modo modulare e se un compilatore ha un front-end C ++ , è probabile che abbia anche un front-end C. (Dovresti quindi selezionare quale di loro vuoi tramite un interruttore a riga di comando o mezzi simili.) Finché entrambe le lingue saranno ampiamente utilizzate, sembra molto improbabile che questo cambierà. Il vostro punto sul "moderno C ++" penso che sia fondamentalmente una questione di buoni standard di codifica e della libreria standard. Dal punto di vista del compilatore , l'evoluzione di entrambe le lingue è piuttosto convergente che divergente.
- Is there right now any collaboration between the people who make the standards of C/C++ to keep the compatibility?
Sì. Il modello di memoria e la libreria di operazioni atomiche introdotte in C ++ 11 e C11 sono un buon esempio. Sembra che i progettisti di entrambi i linguaggi si rendano conto che la compatibilità è importante e stanno lavorando per migliorarla. Personalmente, mi piacerebbe che la collaborazione fosse più intensa e forse i due gruppi di lavoro ISO si sono uniti, ma i miei desideri non sono importanti.
Bjarne Stroustrup parla delle differenze e dei punti in comune tra le varie versioni di C e C ++ nel § 44.3 della 4a edizione di Il linguaggio di programmazione C ++ che, ironia della sorte, si intitola "Compatibilità C / C ++" . In questo caso l'uso del termine potrebbe essere appropriato in quanto è chiaro che cosa si intende.
- If #4 is yes, such collaboration could end up in the near future with the appearance of the modern C++ (11/14/17)
Come discusso in precedenza, è successo in C ++ 11 e si aspetta / spera / deve succedere di nuovo.