<li>il existe depuis longtemps, le début des années 1970 ;</li>
<li>il est fondé sur un standard ouvert ;</li>
<li>de nombreux informaticiens le connaissent ;</li>
<li>il permet la minimisation de l'allocation mémoire nécessaire, son contrôle complet et la maximisation de la performance, notamment par l'utilisation de pointeurs ;</li>
<li>il permet la construction de structures de données complexes et ad-hoc, au plus près des besoins ;</li>
<li>des compilateurs et bibliothèques logicielles existent sur la plupart des architectures ;</li>
<li>il met en œuvre un nombre restreint de concepts, ce qui facilite sa maîtrise et l'écriture de compilateurs simples et rapides ;</li>
<li>il ne spécifie pas rigidement le comportement du fichier exécutable produit, ce qui aide à tirer parti des capacités propres à chaque ordinateur ;</li>
<li>il permet, par la compilation directe vers le langage machine (via l'assembleur), l'écriture de logiciels qui n'ont besoin d'aucun support à l'exécution (ni bibliothèque logicielle ni machine virtuelle), au comportement prévisible en temps d'exécution comme en consommation de mémoire vive, comme des noyaux de système d'exploitation et des logiciels embarqués.</li>
<li>le peu de vérifications offertes par les compilateurs d'origine (k&r c), et l'absence de vérifications à l'exécution, ce qui fait que des erreurs qui auraient pu être automatiquement détectées lors du développement ne l’étaient qu’à l'exécution, donc au prix d’un plantage du logiciel ;
<li>les subtilités de l'écriture de programmes portables, car le comportement exact des exécutables dépend de l'ordinateur cible ;</li>
<li>le support minimaliste de l'allocation de mémoire et des chaînes de caractères, ce qui oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs ; il n'y a notamment pas de ramasse-miettes standard ;</li>
<li>les bugs graves qui peuvent être causés par un simple manque d'attention du développeur ; tel le dépassement de tampon qui constitue une faille de sécurité informatique exploitable par les logiciels malveillants ;</li>
<li>certaines erreurs ne peuvent être détectées automatiquement qu'à l'aide d'outils supplémentaires et non standardisés, comme lint et valgrind ;</li>