151 votes

Pourquoi utiliser le C plutôt que le C++ ?

Bien que les gens semblent aimer se plaindre à propos du C++, je n'ai pas pu trouver beaucoup d'éléments expliquant pourquoi vous voudriez choisir le C plutôt que le C++. Le C ne semble pas recevoir autant de critiques et si le C++ a tous ces problèmes, pourquoi ne pas se limiter au sous-ensemble C ? Quelles sont vos réflexions/expériences ?

25voto

Frank Points 16055

Les longs temps de compilation peuvent être ennuyeux. Avec le C++, vous pouvez avoir des temps de compilation très longs (ce qui signifie, bien sûr, plus de temps pour Stack Overflow !).

20voto

Liran Orevi Points 2126

Si vous voulez que votre code soit compris par pratiquement n'importe quel programmeur, écrivez en C.

16voto

BigSandwich Points 1372

Je suis surpris que personne n'ait mentionné les bibliothèques. De nombreux langages peuvent se lier à des librairies C et appeler des fonctions C (y compris C++ avec extern "C"). Le C++ est à peu près la seule chose qui peut utiliser une librairie C++ (définie comme "une librairie qui utilise des fonctionnalités en C++ qui ne sont pas en C [telles que les fonctions surchargées, les méthodes virtuelles, les opérateurs surchargés, ...], et qui n'exporte pas tout à travers des interfaces compatibles C via extern "C"").

13voto

Doug Points 4923

Parce qu'ils veulent utiliser des fonctionnalités en C99 qui n'ont pas d'équivalents en C++.


Cependant, il n'y a pas autant de fonctionnalités de C99 qui sont utiles au C++ que les gens le pensent à première vue. Des tableaux de longueur variable ? Le C++ dispose de std::vectors. Support des nombres complexes/imaginaires ? Le C++ possède un type complexe modélisé. Fonctions mathématiques génératrices de type ? Le C++ surcharge les fonctions mathématiques standard, ce qui donne le même résultat.

Initialisateurs nommés ? Pas en C++, mais il y a une solution de contournement :

struct My_class_params {
    int i;
    long j;
    std::string name;

    My_class_params& set_i(int ii)
    {
        i = ii;
        return *this;
    }

    My_class_params& set_j(long jj)
    {
        j = jj;
        return *this;
    }

    template <typename STRING>
    My_class_params& set_name(STRING&& n)
    {
        name = std::forward<STRING>(n);
        return *this;
    }

    My_class_params()
    {
        // set defaults
    }
};

class My_class {
    My_class_params params;
  public:
    My_class(const My_class_params& p) : params(p) { }
    ...
};

Cela vous permet d'écrire des choses comme :

My_class mc(My_class_params().set_i(5).set_name("Me"));

10voto

le dorfier Points 27267

Parce que pour de nombreuses tâches de programmation, le C est plus simple, et suffisamment bon. Lorsque je programme des utilitaires légers, en particulier, j'ai l'impression que le C++ veut que je construise une superstructure élégante pour son propre bien, plutôt que de simplement écrire le code.

Par contre, pour des projets plus complexes, l'élégance fournit plus de rigueur structurelle solide que ce qui sortirait naturellement de mon clavier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X