Oui, le C++ a été conçu à l'origine pour que toute bibliothèque C puisse être facilement utilisée en C++. Bien sûr, c'est un peu moins vrai (en particulier, si une bibliothèque C utilise un mot-clé C++ tel que try
ou dynamic_cast
cela ne fonctionnera pas ; de même, si une rappel codé en C++ passé à une bibliothèque C lève une exception, vous risquez d'avoir un gros problème).
La pratique standard pour utiliser un fichier d'en-tête C en C++ est la suivante
extern "C" {
#include <some_c_header_file.h>
};
et les plus existant Les fichiers d'en-tête du C sont conçus pour coopérer avec le C++ en contenant des éléments tels que
#ifdef __cplusplus
extern "C" {
#endif
//// most of the header material goes here, C style
#ifdef __cplusplus
}; // end extern "C"
#endif
Dans la pratique, de nombreux en-têtes standard C ont des en-têtes C++ équivalents qui enveloppent des choses comme ci-dessus (et également dans les éléments suivants namespace std
). Eg C <stdio.h>
est C++ <cstdio>
-mais vous devriez souvent préférer les véritables flux C++ ( <iostream>
), mais printf
-Les routines de ce type sont généralement plus localisation amicale mélangée à gettext(3) .
Cependant Le C et le C++ sont des langages très différents. Vous devez coder en langage C++11 idiomatique (en utilisant le langage C++ standard). conteneurs , auto
, fermetures , RAII , pointeurs intelligents , règle de cinq , SFINAE , exceptions , fonctions anonymes , ...)
Certaines fonctions C standard ne sont pas très utiles en C++ idiomatique. Par exemple, il est peu probable que vous utilisiez directement malloc
en véritable C++ (au moins préférer new
-ce qui reste très bas niveau et n'est plus dans l'esprit du C++, mais plutôt utiliser beaucoup les conteneurs et les pointeurs intelligents. sans traiter manuellement l'allocation du tas). Mais POSIX fonctions (notamment syscalls(2) ....) sont très utiles en C++. longjmp
est susceptible d'être incompatible avec les exceptions C++.
BTW, C++ a évolué beaucoup au cours de ce siècle. N'apprenez pas C++98 mais au moins C++11 (il y a formidable différences entre eux) et peut-être C++14 . Utilisez un récent compilateur ( CCG ou Clang/LLVM ) ; en décembre 2015, cela signifie CCG 5 au moins ou Clang/LLVM 3.7 au moins. N'oubliez pas d'activer tous les avertissements et les informations de débogage dans le compilateur (par ex. g++ -Wall -Wextra -g -std=c++11
)
C++ (c'est-à-dire C++11 au moins) est un difficile langage de programmation considérablement plus complexe que C. Il vous faudra des semaines de lecture pour en apprendre une partie, et un bon style de codage et une bonne discipline sont essentiels (vous pouvez facilement écrire du code très mauvais en C++). Commencez par Programmation : Principes et pratique de l'utilisation de C++
Je crois que si vous ne connaissez que C, la lecture SICP (et étudier un peu de Scheme) antes de l'apprentissage du C++ en vaut la peine.
La notion de comportement indéfini est très important, tant en C et probablement encore plus en C++. Vous devez absolument le comprendre (voir l'article de C.Lattner intitulé blogue à ce sujet ) et éviter il.
Vous apprendrez également beaucoup en étudiant (et peut-être en contribuant) à certains projets existants. logiciel gratuit et son code source. C'est pourquoi je recommande d'utiliser Linux.