- Devrais-je arrêter d'utiliser le terme C / C ++?
Absolument. On ne voit pas clairement ce que cette construction est censée exprimer, sauf peut-être une confusion sur ce que sont C et C ++ au nom de la personne qui utilise le terme.
Puisque cette confusion est une source courante de frustration, beaucoup de gens sont devenus très émus à son sujet et la simple apparence de ce terme sera une raison suffisante pour qu’ils deviennent négatifs à propos de votre contribution. Cela peut sembler idiot, mais cela semble être ce que nous avons.
Je recommande que, au lieu de parler de “C / C ++”, vous utilisiez un terme qui précise ce que vous voulez dire.
Si vous parlez de quelque chose en C qui pourrait ou non être aussi vrai pour C ++, disons simplement C .
Exemple: comment main
déclarer la fonction en C?
Au début, il pourrait sembler que la réponse pour C ++ soit la même: int main()
ou int main(int, char**)
. Mais au fil de la discussion, il pourrait être pertinent de souligner qu'en C ++, la fonction doit être déclarée au niveau global, ce qui n'a pas de sens en C, car elle n'a pas de namespace
s. D'autre part, C permet d'appeler de main
manière récursive , contrairement à C ++. En C ++, il y a une implicite return 0;
si vous "tombez" main
mais en C, l' return
instruction est requise sur n'importe quel chemin. La liste est longue et rend la discussion beaucoup plus simple si vous précisez clairement le langage à discuter.
Si vous parlez de quelque chose en C ++ qui pourrait ou non être vrai pour C, dites simplement C ++ .
Exemple: un malloc()
tableau ed de int
s sera-t-il initialement entièrement composé de zéros en C ++?
La réponse courte pour C se trouve être la même: non. Mais au fur et à mesure que la réponse se poursuit, il pourrait être intéressant de souligner qu'en C, calloc
serait une bonne alternative, alors qu'en C ++, utiliser un std::vector<int>
aurait pu être un meilleur choix en premier lieu.
Si vous souhaitez souligner une similarité entre C et C ++, dites C et C ++ .
Exemple: En C et C ++, l' implémentation de sizeof
an int
est définie et peut varier entre les compilateurs et les architectures.
Ici, nous voulons souligner que C et C ++ se comportent de la même manière. Nous parlons explicitement des deux langues.
En fait, je recommande que vous soyez encore plus précis et que vous ne parliez pas seulement de “C” ou de “C ++”, mais de la version précise. Les deux langues évoluent et une déclaration directe telle que
C ++ prend en charge /* … */
et // …
commente alors que C ne prend en charge que le /* … */
style.
n'est ni juste ni faux.
- Si la réponse à la question 1 est oui, comment pourrais-je appeler un programme qui utilise une combinaison de C et C ++?
Comme les langages se chevauchent, chaque programme C contiendra des parties qui pourraient ressembler à C ++ et vice versa. Néanmoins, les auteurs auront probablement opté pour un compilateur C ou C ++. Ainsi, dites «le programme est écrit en C » s’il est compilé avec un compilateur C et «le programme est écrit en C ++ » s’ils utilisent un compilateur C ++, même s’ils risquent de refuser l’utilisation de fonctionnalités C ++ modernes. Certaines personnes se réfèrent à ce code C ++ en tant que C ++ . L'absence de surcharge, les exceptions, le polymorphisme, les modèles et les flux d'E / S constituent les caractéristiques communes de ce code.
Si, au contraire, certains fichiers sont écrits en C et compilé avec un compilateur C et quelques autres fichiers sont écrits en C ++ et compilé avec un compilateur C ++, puis les fichiers objets liés ensemble, je dirais que « le programme est écrit dans un mélange de C et C ++ ”comme vous l’avez déjà fait.
Cependant, si, au lieu de cela, les auteurs prenaient grand soin d'écrire chaque fichier de manière à ce qu'il puisse être compilé avec un compilateur C ou C ++ et que le programme résultant fasse la même chose, vous pouvez dire que «le programme est écrit dans un sous-ensemble commun de C et C ++ ».
Ce dernier cas est souvent le cas pour les fichiers d’en-tête qui devraient être partagés entre le code C et C ++. L'écriture d'un tel code n'est pas facile, d'ailleurs. Si vous voulez plus souligner que seules les constructions ont été utilisés qui sont valides en C et C ++ et sont largement pris en charge par différents fournisseurs de compilateur, le terme d' un portable sous - ensemble commun de C et C ++ peut être utilisé pour souligner.
- Étant donné que les deux sont des langages «différents», est-il probable qu'un compilateur C ++ cesse de prendre en charge le code écrit en langage C (puisque le C ++ moderne s'écarte de la mentalité C pour les éléments de base tels que les pointeurs, la gestion de mémoire dynamique, etc.)?
Je ne suis pas sûr de comprendre cette question. Comme C et C ++ sont des langages différents, vous ne pouvez pas vous attendre à ce qu'un compilateur accepte un programme écrit pour l'autre. Cependant, les statisticiens sont souvent conçus de façon modulaire et si un compilateur C ++ a un front-end , les chances sont bonnes , il disposera également d'un frontal C. (Vous choisirez ensuite laquelle de vos choix via un commutateur de ligne de commande ou un moyen similaire.) Tant que les deux langues seront largement utilisées, il semble très peu probable que cela change. Je pense que votre remarque sur le «C ++ moderne» est essentiellement une question de bonnes normes de codage et de la bibliothèque standard. Du point de vue du compilateur , l'évolution des deux langues est plutôt convergente que divergente.
- Existe-t-il actuellement une collaboration entre les personnes qui établissent les normes du C / C ++ pour conserver la compatibilité?
Oui. Le modèle de mémoire et la bibliothèque d'opérations atomiques introduits dans C ++ 11 et C11 en sont un bon exemple. Il semble que les concepteurs des deux langues se rendent compte que la compatibilité est importante et travaillent à l’améliorer. Personnellement, j'aimerais que la collaboration soit plus intense et que les deux groupes de travail de l'ISO aient peut-être même adhéré, mais mes souhaits ne sont pas importants.
Bjarne Stroustrup parle des différences et des points communs entre les différentes versions de C et C ++ dans le § 44.3 de la 4ème édition du Langage de programmation C ++ qui, ironiquement, s'intitule «Compatibilité C / C ++». L'utilisation de ce terme pourrait en fait être appropriée dans ce cas car son sens est clair.
- Si # 4 est oui, une telle collaboration pourrait aboutir dans un proche avenir avec l'apparition du C ++ moderne (11/14/17)
Comme discuté ci-dessus, cela s'est produit dans C ++ 11 et on s'attend à ce qu'il se reproduise.