Je suis un programmeur C # et l'essentiel de mon développement concerne des sites Web ainsi que quelques applications Windows. En ce qui concerne C, je ne l'ai pas utilisé depuis longtemps, car ce n'était pas nécessaire. J'ai été surprise par un de mes amis qui lui a dit qu'elle devait apprendre le C pour tester des emplois pendant que je l'aidais à apprendre le C #.
J'ai pensé que quelqu'un apprendrait le C uniquement à tester si un développement était effectué en C. Tous les développements liés à la conception COM et à la conception matérielle sont également réalisés en C ++. Par conséquent, l'apprentissage de C n'a pas de sens si vous devez utiliser C ++. Je ne crois pas non plus en l'importance historique, alors pourquoi perdre du temps et de l'argent dans l'apprentissage de C?
Est-ce que C est toujours utilisé dans tout type de développement logiciel ou autre?
la source
Réponses:
C a l'avantage d'être un langage relativement petit , ce qui facilite l'implémentation d'un compilateur C (alors qu'un compilateur C ++ est un monstre à écrire) et facilite l'apprentissage du langage . Voir aussi l' index TIOBE , selon lequel C devance légèrement C ++.
Dans l’ordre de justification décroissant (IMO), C est encore beaucoup utilisé pour
Choses Embarqué
Il est beaucoup plus facile au port d' un compilateur C à une petite plate - forme qu'il est au port d' un compilateur C ++. En outre, les défenseurs du C prétendent que C ++ "en fait trop derrière leur dos". Cependant, IMO c'est FUD.
Programmation de systèmes
Encore une fois, cela est généralement dû à l'affirmation qu'il est plus facile de "savoir ce que fait le compilateur". Cependant, de nombreux programmes intégrés bénéficieraient, par exemple, de modèles et d'autres fonctionnalités de clé C ++.
Logiciel open source
C'est cependant surtout un problème d'attitude: OSS a toujours préféré le C au C ++ (alors que c'est l'inverse dans de nombreuses parties du secteur). La haine irrationnelle de Torvalds pourrait bien en être la raison la plus importante sous Linux .
la source
std::vector
ou plusieursstd::map
codes, mais vous ne devez pas le mettre en œuvre vous-même, mais vous pouvez vous fier à des outils bien testés et très performants. et des implémentations de bibliothèques fiables offrant des abstractions élevées.C est beaucoup utilisé dans la programmation de matériel embarqué où les ressources sont rares.
Le noyau Linux est écrit en C car, selon Linus Torvalds, le C ++ est un langage horrible .
la source
Toutes les langues modernes que j'ai vues peuvent interagir avec C:
La nécessité d'interagir avec C découle de:
Cela signifie que puisque ces langues peuvent communiquer avec C, elles peuvent:
Et je parierais que tous comptent sur C pour leurs durées d’exécution (à moins qu’ils ne s’assemblent en assemblée? Douteux).
C est la Lingua Franca des langages de programmation et l’un des plus simples (en termes d’ABI) qui ne soit pas lié à une architecture spécifique (comme l’assemblage en est un), il faudra un changement majeur pour s’en débarrasser.
la source
À mon avis, il s'agit d'une question à très courte vue s'apparentant à "Mes amis et moi écoutons du reggae. Quelqu'un écoute-t-il encore le rap?".
Chaque langue a son utilisation. Différentes langues ont définitivement leurs niches. Mais poser des questions sur C! Je suis sûr que moins de gens utilisent quotidiennement C # que C (du point de vue totalement biaisé du travail dans un magasin où personne n’utilise C #).
Google rapide à la recherche sur la popularité relative des langues.
Je suis sûr que rien de tout cela ne fait autorité, mais nous pouvons l'utiliser pour voir les tendances:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://langpop.com/
Même en regardant SO ratio de question sur les balises:
https://stackoverflow.com/tags
C est donc le sujet le plus populaire de SO (il existe beaucoup d’autres langues).
Remarque: L'indice TIOBE ci-dessus, constamment mis à jour depuis plus d'une décennie (et dont certaines données remontent à trois décennies), est censé mesurer le nombre d'ingénieurs travaillant dans chaque langue (bien que je ne sache pas à quel point c'est exact). Parmi les 10 langues les plus utilisées, à l'exception de Java / Visual Basic, cela correspond à ce que savent les utilisateurs de mon magasin (bien que nos ratios soient légèrement différents, car notre échantillon est beaucoup plus petit).
la source
I am sure none of this is authoritative but we can use it to see trends
Mais je ne suis pas d'accord avec votre deuxième déclaration. C n’est plus la langue principale enseignée dans les instituts d’enseignement supérieur (le cas échéant, le nouveau groupe de diplômés ne serait pas aussi inutile). Les gens ont tendance à apprendre Java / C # sharp de nos jours. De plus, le rapport Tiobe concerne les travaux et non les requêtes.Vous devrez peut-être utiliser C lorsque vos ressources sont limitées et que vous n’avez pas besoin de fonctionnalités orientées objet.
De nombreux logiciels utilisés aujourd'hui sont encore écrits en C, sans parler des pilotes matériels.
Selon l’ indice Tiobe , C est toujours la langue la plus utilisée.
Comme suggéré par tcrosley, vous voudrez peut-être examiner cette question connexe .
Vous devriez également rechercher des articles connexes sur les différences entre C et C ++, comme ce wiki ou ce exemple.
la source
On dirait que vous essayez de vous convaincre que C est inutile et peut donc être ignoré. Décomposons votre question:
"J'ai pensé que quelqu'un n'apprendrait le C pour tester que s'il y avait du développement en C."
Non, il y a de nombreuses raisons pour apprendre le C. Même si vous ne le saviez pas, j'évitais tout de même d'utiliser de tels énoncés, en particulier avec la logique circulaire. Évidemment, il faut connaître la langue dans laquelle le code est écrit pour pouvoir le tester / le corriger correctement, mais cela suppose que la langue est toujours utilisée comme telle et qu’elle est vraie pour toutes les langues et pas seulement C.
"A ma connaissance, tous les développements liés à la conception COM et à la conception matérielle sont également réalisés en C ++."
C'est inexact.
"Par conséquent, l'apprentissage de C n'a pas de sens si vous devez utiliser le C ++. Je ne crois pas non plus en l'importance historique, alors pourquoi perdre du temps et de l'argent en apprenant le C?"
C'est la logique la plus discutable de toutes. Tout d’abord, l’importance historique est une chose à laquelle il faut croire, car si vous le saviez, vous sauriez que C est un sous-ensemble du C ++ et que, de ce fait, le savoir C peut vous aider à devenir un meilleur programmeur C ++. Bien sûr, C a également influencé la plupart des langues qui l'ont suivi, de sorte que les avantages ne s'arrêtent pas là. En outre, comme C est si important, il ne peut être considéré comme n’ayant qu’une importance historique. Il est encore largement utilisé et ne peut donc pas être relégué à une position secondaire comme celle-là. Vous pouvez faire valoir que ce n'est pas un langage que chaque programmeur doit utiliser et avoir une connaissance approfondie, ce serait juste, mais veuillez ne pas développer votre argument en affirmant que vous ne croyez pas en quelque chose sans d'abord en examiner les véritables mérites.
la source
En plus des systèmes embarqués, la plupart des langages plus récents ont un moyen de s’interfacer avec C. Lorsque vous écrivez une bibliothèque que vous souhaitez utiliser facilement dans toutes ces langues, C est un choix évident. C ++, bien qu'il puisse également s'interfacer avec certains langages (tels que Python (CPython uniquement)), le C ++ ne peut pas s'interfacer avec un plus grand nombre de langages en raison de certaines de ses fonctionnalités (changement de nom en particulier, mais les modèles n'aident pas le problème). C ABI est l’un des plus faciles à utiliser (je sais que vous pouvez écrire en C ++ et utiliser extern "C" pour l’interface. Cela m’importe peu).
Il présente également l'avantage que C et C ++ sont vraiment les meilleurs langages pour la programmation système et que les temps de compilation en C sont beaucoup plus rapides. Les temps de compilation C ++ sont visiblement les pires de tous les langages que j'ai utilisés.
Bien qu’il existe d’autres langages qui souhaitent devenir le langage système le plus populaire (je connais D en particulier), une grande majorité des logiciels sont écrits en C / C ++. Les langages comme D exigent que quelqu'un crée un wrapper autour de la bibliothèque C au lieu de l'utiliser directement (comme vous le feriez avec C ++).
la source
extern(C)
en D, alors qu'en C ++ vous écrivezextern "C"
consultez langpop.com , en particulier les graphiques de Freshmeat et Google Code. Cela montre que C est toujours en avance.
C est toujours populaire sur les systèmes où vous devez vous rapprocher du métal (système intégré) et des applications gourmandes en performances.
la source
Je l'utilise presque tous les jours en développement pour iPad / iPhone. De nombreuses bibliothèques sont écrites en C et n’ont pas d’équivalent Objective-C. Alors oui, il est toujours utilisé et par l’un des appareils les plus récents du marché.
Avec C, vous pouvez programmer de nombreux systèmes embarqués, petits et pratiques, et le seront probablement dans les années à venir (vous ne perdez pas de temps ni d'argent à l'apprendre)
la source
Généralement, pour le système intégré, C est encore largement utilisé.
Cette question donne un autre exemple.
L’ indice Tiobe , qui tente de classer la langue par popularité / usage , place systématiquement C au premier rang.
la source
Portabilité.
Faites une liste de tous les systèmes qui, à votre avis, exécuteront du code C, puis une liste similaire pour toutes les autres langues de votre choix.
Si vous apportez la même réponse que moi, alors la conclusion est oui.
la source
Eh bien, je pense que C est le langage le plus puissant pour les raisons suivantes!
1) AT first C, C’est un langage système (c’est-à-dire qu’il peut être utilisé pour faire de la programmation de bas niveau avec une exécution minimale ou inexistante).
2) Vitesse de l'application résultante. Le code source C peut être optimisé beaucoup plus que les langages de niveau supérieur car le jeu de langages est relativement petit et très efficace. C’est à peu près aussi proche que possible de la programmation en langage assembleur, sans programmation en langage assembleur. et vous pouvez même utiliser ensemble et C ensemble!
3) C a quelle est son application dans la programmation du micrologiciel (matériel). Cela est dû à sa capacité à utiliser / travailler avec l’assemblage et à communiquer directement avec les contrôleurs, processeurs et autres périphériques.
4) C est un bloc de construction pour de nombreuses autres langues actuellement connues. Recherchez l'historique de C et vous constaterez qu'il existe depuis un certain temps (les langages de programmation le sont quand même). Jetez un coup d'œil à Python, par exemple, un langage de programmation de haut niveau entièrement orienté objet. Il est écrit en C (peut-être aussi en C ++). Cela vous dit si vous voulez savoir ce qui se passe sous le capot dans d'autres langues; Comprendre C et son fonctionnement est essentiel.
Un langage d'application est utilisé pour la programmation de haut niveau, par exemple l'écriture d'un traitement de texte ou d'un jeu. Des exemples de langages d'application sont Java, C #. La raison en est qu’elles contiennent un ramasse-miettes, une saisie automatique, une validation au moment de l’exécution, etc. - l’accent étant mis sur la productivité.
Un langage système est utilisé pour la programmation de bas niveau. Par exemple, un micro-contrôleur, un pilote et un noyau de système d'exploitation. Les exemples incluent assembly, C. Ils requièrent peu ou pas d’exécution pour exécuter le code directement sur le matériel, et le programmeur a pour objectif principal de contrôler directement le matériel.
Dans l’ensemble, il est en déclin en tant que langage d’applications, mais reste fort en tant que langage système.
la source
Oh oui, c'est utilisé. Je travaille dans le domaine du traitement de paquets en réseau. Je suis allé dans deux sociétés différentes où nous traitons des paquets de réseau. Nous travaillons donc au niveau Ethernet ou IP, et non au-dessus de TCP.
Fait intéressant, dans les deux sociétés, C a été choisi plutôt que C ++. Dans l’une des sociétés, l’un des deux produits était construit sur le noyau Linux, alors que l’autre était construit dans l’espace utilisateur Linux. Le produit du noyau utilisé évidemment en C, le noyau Linux étant programmé en C, ils ont également choisi d'utiliser le C pour le produit en espace utilisateur. Les deux produits ont été développés à partir de l’an 2000 environ (le produit du noyau un peu avant 2000 et le produit de l’espace utilisateur un peu après 2000).
Dans l'entreprise où je suis allé après cela, le produit a été construit en C, pas en C ++. Il s’agit en réalité d’une poursuite du projet du milieu des années 90, bien qu’étant donné les exigences récentes en matière d’amélioration des performances, il a été décidé que tout serait réécrit. Nous avions une option pour sélectionner C ++ en raison de cette réécriture, mais nous ne l'avons pas fait.
Dans le domaine du traitement de paquets en réseau, les performances comptent beaucoup. Je souhaite donc implémenter ma propre table de hachage ayant des performances supérieures à celles des tables de hachage existantes. Moi, et non l'auteur de la table de hachage, je suis celui qui sélectionne la fonction de hachage à utiliser. Peut-être que je veux la performance et aller pour MurMurHash3 . Peut-être que je veux la sécurité et aller pour SipHash . Les allocateurs de mémoire sont évidemment personnalisés. En fait, toutes les structures de données importantes que nous utilisons ont été implémentées sur mesure pour des performances optimales.
Bien que rien n'empêche d'utiliser le C ++, c'est généralement une mauvaise idée. Une seule exception levée par paquet laissera tomber le taux de traitement des paquets à des niveaux inacceptables! Nous ne pouvons donc pas utiliser les exceptions de C ++. Bien trop lent. Nous utilisons déjà un type de code C orienté objet en implémentant des structures de données en tant que structures, puis en implémentant des fonctions opérant sur ces structures. C ++ permettrait d’avoir des fonctions virtuelles, mais les appels de fonction virtuels tueraient les performances s’ils étaient utilisés partout. Il est donc préférable d’être explicite et d’avoir un pointeur de fonction si des appels de fonction virtuels sont nécessaires.
C ++ fera beaucoup de choses derrière votre dos: allocation de mémoire, etc. Par contre, en C, cela n'arrive pas d'habitude. Vous pouvez écrire une fonction qui alloue de la mémoire, mais il ressort généralement de l'interface de la fonction que l'allocation est en cours.
Pour illustrer le type de micro-optimisation que vous pouvez effectuer lors de la programmation en C, consultez la macro container_of du noyau Linux. Bien sûr, vous pouvez utiliser container_of dans le code C ++, mais qui fait cela? Je veux dire, cela est tout à fait acceptable dans la plupart des programmes C, mais les programmeurs C ++ typiques proposeraient immédiatement autre chose, telle qu'une liste chaînée qui alloue les nœuds de liaison en blocs séparés. Nous ne le voulons pas car chaque bloc de mémoire alloué est mauvais pour la performance.
Peut-être que la seule chose qui nous serait bénéfique en C ++ est que C ++ autorise la métaprogrammation des modèles, ce qui signifie que vous pouvez parfois éviter les appels de fonctions virtuelles tout en conservant un paramètre de fonction et permettre au compilateur de mettre les fonctions en ligne. Cependant, la métaprogrammation des modèles est compliquée et nous avons réussi à répondre à toutes les exigences en C, de sorte que les avantages de cette fonctionnalité en C ++ ne sont pas si critiques.
Dans l'une des sociétés, nous avions un langage compilé personnalisé dans lequel une partie des fonctionnalités était implémentée. Devinez quel était le langage cible du compilateur? Assemblée? Non, nous devions prendre en charge les architectures 32 bits et 64 bits. C ++? Vous plaisantez sûrement. Évidemment, c'était C avec goto calculé par GCC . Ainsi, le langage personnalisé a été compilé en C (ou en fait la variante gcc de C qui prenait en charge la fonction goto calculée), et le compilateur C a produit
la source
J'utilise toujours C quotidiennement et l'une des principales raisons est l'interopérabilité avec d'autres langages et un SDK conçu pour être utilisé par des plugins construits par tous les types de compilateurs dans différentes langues.
Je ne peux pas écrire une API C ++ qui utilise des classes avec des constructeurs, des destructeurs et des vtables, une surcharge de fonction, des exceptions, etc. pouvant être utilisées à partir de Lua, C #, Python, C, etc. Sans parler d'un plugin C ++ écrit avec différents compilateurs et les paramètres de notre propre.
Je ne peux pas écrire un SDK C # pouvant être appelé à partir de Python, par exemple, ni un SDK Python pouvant être appelé à partir de C #.
C est le seul langage qui me permet de créer une API pouvant être appelée à partir de n’importe lequel de ces langages. Cela dit, j’utilise souvent le C ++ pour implémenter ces interfaces C (bien que je les implémente parfois en C).
En outre, je trouve parfois que C est le langage le plus simple à utiliser, par exemple pour les structures de données de bas niveau et les allocateurs de mémoire. Toute la sécurité de type supplémentaire que vous gagnez en C ++ n’aide en rien si vous écrivez un allocateur de mémoire conçu pour regrouper des bits et des octets alignés. Et contre le riche système de types et la gestion des exceptions de C ++, il n’est pas facile de mettre en place vos propres structures de données - il suffit de regarder l’effort nécessaire pour écrire une structure de données aussi triviale que
std::vector
si vous souhaitiez la rendre exempte d’exceptions et éviter d’appeler. ctors et dtors sur des éléments que vous n'avez pas insérés dans le conteneur (je parle en tant que tel qui a implémenté toute la bibliothèque standard C ++). Lorsque la mise en œuvre d'un réseau pouvant être développé est très difficile, imaginez le travail nécessaire pour mettre en œuvre un système BVH de qualité production.Je préfère le C ++ au C lorsque je veux utiliser des structures de données existantes ou implémenter des structures de niveau supérieur en utilisant celles existantes, mais si je vais implémenter une structure de données de bas niveau au cœur d'un moteur qui ne sert à rien. Avec les structures de données existantes, C rend cela beaucoup plus facile à faire avec son système de types ultra simpliste qui vous permet de ne faire que des
memcpy
choses ici etmemmove
là,malloc
un bloc contigu et toutrealloc
ce qui est là, sans vous soucier des constructeurs, des destructeurs et des exceptions lancés.la source