C# ou C++ ?

Résolu/Fermé
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 - 16 févr. 2010 à 09:34
 Acto - 15 juil. 2010 à 20:01
Bonjour,

Pour mon premier projet, je cherche un langage de programmation autre du python qui ne permet pas de
créer un interface.(enfin si, m'est pas très avancé)
Par cela, je me suis penché sur le C#, et aussi sur le C++.
Mais quel est le plus apprécier ? le C++ ou le C# ?
Le C++ est le plus utilisé pour le moment sur le web, question tutos comme application de programmation (ogre par exemple) , le C# est peu sortit du lot, peu de tutos, d'applications dédié..
Quel sera votre choix ?

Merci pour vos réponse ou avis,

17 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 févr. 2010 à 14:05
Qt n'est pas libre, mais gratuit.
C'est tout de même Microsoft qui s'occupe du bazar, donc soumis à ça bonne volonté. Faire tourné un prog C# sur Linux releve plus du bidouillage qu'autre chose.
J'aime beaucoup ta phrase "presque libre", autant dire qu'il ne l'est pas. :-)
En conclusion, nous conseillons C++.
2
TheRedXPeace Messages postés 14 Date d'inscription jeudi 23 juillet 2009 Statut Membre Dernière intervention 15 juillet 2010
15 juil. 2010 à 01:54
Faire tourné un prog C# sur Linux releve plus du bidouillage qu'autre chose.

c'est complètement faux. Il suffit d'installer le compilo ainsi que la lib et le tour est joué !
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 févr. 2010 à 10:27
C++ avec Qt.
C++ : portable standard et non propriétaire.
C# : pas portable, et propriétaire.
1
Le problème principal de C# est que son niveau d'abstraction très haut ne te permettra jamais d'apprendre a programmer.
Ca va plus vite de faire des programmes et des interfaces en C# pour la simple raison que tu n'as pas a écrire le code, c'est pré-maché. Pratique oui. Mais c'est du code auto généré jetable, impossible a maintenir sur le long terme car il est impossible de savoir comment il fonctionne!
De plus, Visual Studio et le CLR sont buggés.
Ensuite C# n'est ABSOLUMENT pas portable, c'est un truc du service marketing:
pour qu'un langage soit "portable", il faut qu'il s'interface avec le matériel. C# n'est compris par aucune machine, seulement par la machine virtuelle de son propriétaire Microsoft, qui est faite en C/C++, et compile en code natif car le C EST très portable!
Enfin, le CLR interprète tout le pseudo code C# en C qui est ensuite compilé (sauf les parties "dynamiques" s'il y en a), mais nécessite toujours son *lourd* runtime.
C# est aussi beaucoup plus lent que ce que Microsoft veux bien le dire.
(pour les curieux: http://shootout.alioth.debian.org/u32/c.php et
http://trustleap.com/ ).

"Within C++ there's a much smaller and cleaner subset struggling to get out"
Bjarne S. (C++ father).

Apprend le C.
1
Pour ce qui est des langages qui tendent a disparaitre...
Voici: https://www.tiobe.com/tiobe-index//

1 - Java (haut niveau aussi, mais bien préférable à C#)
2 - C
3 - C++
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
13 juil. 2010 à 12:03
Pour la question de la portabilité...
J'ai finalisé récemment un petit projet personnel : un logiciel qui permet de piloter VLC pour programmer des enregistrements sur des flux réseaux.
Je l'ai programmé en C# .net, d'abord sous Windows.

Entre temps, mon PC perso est mort, j'en ai récupéré un d'occase sans OS -> je suis passé à Linux... et j'ai voulu lancer mon programme.

Le plus gros point noir concerne les WinForms. Celles-ci ne sont pas ouvertes car elles font appel à de nombreuses fonctions systèmes spécifiques à Windows. Leur portage est mauvais.
Par contre, GTK est porté en .Net, et dispose même d'un environnement de développement intégré à Mono. Le portage se fait donc simplement.

En ce qui concerne l'algorithmique, je n'ai eu aucun soucis, tout le code de base (le C#) passe sans encombre. Les classes .Net les plus utilisées (en tous cas, celles que j'ai utilisées !) ne posent pas non plus de soucis.
Un petit bémol néanmoins pour la gestion des process : mes vérifications pour savoir si les process lancés étaient terminés ou non ne fonctionnaient pas. Des raisons personnelles font que je n'ai pas pris le temps de comprendre ce qui n'allait pas, j'ai débranché la fonctionnalité, donc je ne pourrais pas en dire plus.

Toujours est-il qu'aujourd'hui, j'ai une application C# / .Net qui tourne sous Windows ET sous Linux, avec juste un petit fichier de conf dans lequel j'ai un paramètre qui me dit quoi utiliser comme fenêtres : GTK ou WinForms. Il suffit de respecter quelques bonnes pratiques en ce qui concerne la séparation des traitements et de l'affichage pour que ce dédoublement ne coûte pas cher.

Xavier

PS : Ah oui, et au début, j'ai bien sûr eu un soucis dans les chemins des fichiers... C'était avant de découvrir System.IO.Path.DirectorySeparatorChar, qui contient le séparateur de chemin adapté au système... Comme quoi, ça a bien été pensé multi-plateforme !
1
Et bien moi aujourd'hui encore, j'ai eu un bug inhérent au CLR...
Du code fantome qui survie alors même qu'il a été effacé du source!
Et qui s'exécute, même après avoir redémarré le pc, re-compilé, ...! (on aurait dit un film de zombie, impossible de tuer ce code...).
Bref je vais devoir recommencer une partie du projet.

Pour le multi-plateforme, certes cela fonctionne a condition d'avoir le runtime adéquat! Ce n'est pas de la vraie portabilité, c'est juste que la machine virtuelle est prévue pour un système particulier. Pour preuve, on installe Mono sur Linux, et la version Windows sur Windows (il existe aussi un mono sur Wndows je crois, mais chaque version est dédiée a un OS).
Je ne dis pas que c'est mal, hein, c'est une solution, mais le terme "portable" est utilisé un peu abusivement pour une question de sex appeal. Puisque dans la mesure ou on masque le hardware par autre chose qui sert d'interface et qui est indispensable a l'exécution....

En parlant d'abus de langage, je dirai un mot sur les performances.
Pour pleins d'applications standard, c'est sur que on s'en moque un peu, la vitesse et la facilité (enfin des fois c'est pas si simple VS je trouve...) de développement priment.
Mais quand Microsoft dis que C# est aussi (voir plus) rapide que du code natif, hé bien il faut lire les protocoles de tests (^ ^).
Il ne faut pas perdre de vue que si les performances globales de C# sont à la hausse, c'est aussi que les pc sont 10 fois plus rapide qu'il y a 5 ans. Et donc le "gap" se réduit mécaniquement entre les langages car on ne tiens pas compte de l'échelle de vitesse de traitement (ce qui arrange bien le service marketing). On ne devrai pas mesurer la différence de temps d'exécution, mais la différence de cycle d'horloge.
Certes, le CLR sait faire des tas de choses assez ou très bien. Mais tous les cas ne sont pas prévus par le runtime (hé c'est pas magique hein! Des gens ont du coder tout ça en prévoyant l'utilisation qu'on en ferait), et si c'est pas prévu ça peut être la catastrophe au niveau performance et sécurité. Mais l'API est énorme et pour du dev d'application "classique" ca suffit bien (en fait elle est tellement énorme que s'est limite le bordel amha).

Moi personnellement je n'aime pas trop les assistants en règle générale, cependant pour certaines choses c'est vraiment pratique (pour les trucs chiants quoi ^^).

Bref, différents outils pour différents objectifs, mais il ne faut pas se laisser séduire par les sirènes du marketing (ils sont là pour ça et si Microsoft les payent il doit y avoir une raison...) qui clament que leur solution est bonne pour tous les cas!

Donc pour ces raisons et celles exposés dans le post plus haut, je n'inciterai pas a C# si on ne connais pas un langage plus bas niveau (monter l'échelle de l'abstraction est plus aisé et plus formateur que la descendre. Car si en première impression on a un langage de haut niveau, ca deviens la définition de la programmation, un point de comparaison qu'on va faire avec les autres langages. Et par exemple le C n'a pas 5900 fonctions pour tout faire comme php, mais il a d'autre chose a enseigner comme comment fonctionne réellement un pc et comment l'utiliser efficacement, ce qui aide aussi a faire des choix de solutions quand on en viens a un plus haut niveau d'abstraction).
Mais chacun est libre hein!
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 juil. 2010 à 15:31
Je suis globalement d'accord.
Juste un truc, avec ta définition de la portabilité, je ne suis pas sûr que quoi ce soit soit portable...
Java, pareil que .Net, il faut la JVM adaptée au système. Le C ? Même là, il faut un compilateur adapté, non ?
0
Oui, c'est vrai j'ai exagéré la définition de la portabilité.
De même que Sun pour Java et Microsoft pour C# (je n'ai pas cité Java parce que je connais moins et que le sujet d'origine est C#/C++) exagèrent en prétendant que le code est absolument portable. Ce que je voulais montrer s'est qu'en fait de portabilité, le code C# ou Java tourne toujours sur la même machine, la machine virtuelle.

Pour le C il faut re-compiler oui, et modifier un peu le code quelques fois. Mais les concepts qui forment ce langages sont en très grande partie commun au diverses plateforme ce qui fait qu'on a en fait pas beaucoup de code a retoucher (sans machine virtuelle ^^).
Il est de plus possible de prévoir des tests de préprocesseur a la compilation (ces tests sont du code dans le fichier source du programme) pour déterminer sur quel environnement se déroulera l'exécution et ainsi avoir un seul source pour toutes les plateformes!
Write once, compile everywhere.

Par exemple il m'est arrivé d'écrire du code sur PC (windows) et de compiler sans changer une virgule sur Linux et Mac. Avec Java on ne re-compilerai pas, on fournit "l'exécutable" (l'équivalent quoi) pour toute les plateformes, mais on doit installer la JVM sur celle ci, sinon on ne peut exécuter.

J'ai oublié de parler de la Garbage Collection de C# et Java mais je vous laisse vous renseigner sur le sujet si ca vous dis (en gros ben... ca marche pas top). J'aime bien la pub qui fait peur en disant qu'un programmeur peut très bien faire des memory leaks sans s'en apercevoir (et c'est vrai) alors que grâce a la GC il ne s'en occupe plus. C'est oublier le fait qu'il existe des analyseurs de code qui détecte les fuite de mémoire et le fait qu' un GC (pour l'instant du moins) c'est hiroshima dans la mémoire dès qu'il a décidé de tirer la chasse (pace que la mémoire n'est dés-allouée que très longtemps après qu'elle est cessé d'être utile, par gros blocs pour pas gêner en permanence les performances).

Et puis un autre avantage du C (ou même du C++ si on reste sage) c'est que c'est du procédural (nan pas taper s'il vous plait!) .

Comme je ne voudrai pas avoir l'air de descendre C# et Java qui sont des bons outils, heu... j'écris cette phrase.
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
16 févr. 2010 à 14:20
Personnellement depuis l'arrivée de Mono 2.4 je n'ai aucun soucis pour développer en C# sous linux.

Après je pense que chacun à ses préférences, mais pour commencer, je trouve le C# bien plus facile à aborder.

En plus les IDE pour le C# sont très bien foutus (Visual C# Express 2008 gratuit sous Windows, et MonoDevelop sous linux).

Il existe des tutos pour bien commencer dont en voici un :
http://msdn.microsoft.com/fr-fr/vcsharp/msdn.coachcsharp.aspx

Et un autre pas mal du tout :
https://visualstudio.microsoft.com/vs/express/

Voilà donc c'est à toi de voir, si tu avance vite en C++ tant mieux, mais je trouve qu'il y a plus de notions à assimiler en C++ qu'en C# ce pourquoi je te le conseille vraiment (le C# donc ^^).

0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
16 févr. 2010 à 15:01
Par rapport au post de départ : C# permet de créer des interfaces plus facilement... Comme il recherche un outil NE PERMETTANT PAS OU PEU de créer des interfaces, corrigez moi si je me trompe, je pense qu'il préfèrera utiliser le C++.

Après, on peut dire que je débute en C# et que je l'utilise pour faire de l'informatique de gestion (importation et exportation de données, dans des applications fenêtres Windows), mon avis n'est peut-être pas objectif.

Cordialement, Feadin
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
16 févr. 2010 à 16:54
Je pense que tu n'as pas compris sa phrase ^^
Il disait que c'était le python qui ne lui permettait pas de créer une IG à sa convenance, et justement il cherche un langage qui lui permette de faire une interface plus facilement.

De mon côté, je préfère le C#, mais c'est surtout par habitude.
Le choix, pour moi, se résume à :
- Une application performante ? C++
- une application rapide à développer et facile à maintenir ? C#
0
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
16 févr. 2010 à 16:57
Au temps pour moi.

Dans ce cas, je suis d'accord : C# pour la facilité et la rapidité, C++ pour la performance.
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011 52
16 févr. 2010 à 21:04
Le C# est full object alors que le C++ est juste orienté objet. Autrement dit le C# ne fonctionne qu'avec des méthodes. C'est pour ça que ça t'a l'aire plus compliqué mais en fait trop pas !
0
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 4
16 févr. 2010 à 21:05
J'ai oublié, interaction de l'xml est possible pour les 2 langage ?
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
16 févr. 2010 à 22:25
La manipulation de fichiers XML est possible avec les deux.

En C# tu fait un "using System.Xml;" et tu auras plein de chouettes outils pour manipuler des fichiers Xml très facilement. En C++ je ne sais pas trop ^^

Après moi je trouve le C# plus facile aussi parce que prenons ton exemple de Hello World.

Console.WriteLine("Bonjour");

Signifie pour moi très clairement : je prend la console, j'y écris quelque chose, ce quelque chose c'est "Bonjour".

En C++ tu as :

std::cout << "Hello world!" << std::endl;

Qui signifie en fait (je pense) :
Je prend la sortie standard, duquel je prends la sortie (out) console (c) = cout dans lequel je fais glisser "Hello World" et je lui indique la fin par le biais du End Line (fin de ligne) que représente le endl toujours dans la sortie standard (std).

Personnellement j'ai plus facile à comprendre la ligne C# qui est tout de même bien plus explicative à première vue même pour quelqu'un qui n'y connait rien.

Après pour un simple Hello World je suis d'accord que le C# peut paraître plus long à écrire, mais lorsque tu vois des gros programmes C++ qui ont à chaque fois les headers (fichiers .h) et le code source (fichiers .cpp) alors qu'en C# pas besoin de fichiers headers, pas de pointeurs, tout est beaucoup plus logique, le nom de variable n'est que la référence vers l'objet, tandis qu'en C++ tu galère parfois (bien que ce ne soit plus la même galère qu'en C) pour faire des choses qui paraissent toutes bêtes.

Après certains amis me disent que je n'aime pas le C++ car j'ai commencé par le Java et que le C# prends la facilité du Java couplé à la puissance du C++, ben je dit que je ne sais pas, chacun ses goût ^^

Pour finir, autant tu peux faire du C++ avec Visual Studio, autant tu peux faire du C# avec visual studio.

Qui plus est, depuis les nouvelles versions de Visual Studio tu peux cibler le framework que tu souhaites. Et tu peux même avoir Visual C# Express Edition 2008 gratuitement, qui pour moi est le must (juste après SharpDevelop) pour développer en C#. (il est là : http://msdn.microsoft.com/fr-fr/express/aa975050.aspx)

Maintenant à toi de faire ton choix, l'idéal je pense ce serait que tu commences par exemple à faire une petite application qui lit un fichier texte où à chaque ligne il y a un nom, et trie les noms de ce fichier texte.

Tu sauras alors très vite vers quel langage te tourner ^^
0
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 4
17 févr. 2010 à 09:33
Merci pour vos réponse,
Donc pour le xml s'est bon, pour l'exercice (^^) faut les trier par ordre alphabétique ou croissant/décroissant ?
Grâce à vous je vais me pencher vers le C#, d'ailleurs j'ai ma propre licence
Visual Studio 2008 pro donc pour compiler... pas de problème...
0
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 4
17 mai 2010 à 22:48
Quelqu'un a un livre à me conseiller sur le C# ?
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
22 mai 2010 à 09:32
Quelques bouquins :

En français, une bonne référence pour le C# :
https://www.eyrolles.com/Informatique/Livre/c-et-net-9782212126044/

Sinon en anglais et plus dans le style d'un apprentissage pas à pas il y a celui-ci :
http://oreilly.com/catalog/9780735626706

Sinon il y a aussi ce bouquin là en anglais que tu peux télécharger gratuitement en cliquant sur le petit bouton DOWNLOAD sous l'image du livre :
http://www.free-ebooks-download.org/free-ebook/dotnet/CSharp/beginning-visual-csharp-2010.php
0
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 4
29 mai 2010 à 18:43
Merci, je vais jeter un oeil ! enfin lire...
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011 52
16 févr. 2010 à 13:03
Salut,
Cette fois ci tu n'as PAS raison !
C# n'est pas propriétaire et .NET est presque libre !
Ce qui permettrais de développer des applications avec un code portable mais non seulement multiplate-form !
Biensure ainsi qu'en C++, cela est relatif ! Tu pourras autant faire un code portable win32 sur C++ que C# !

C++ est bien préférable car extrêmement performant et soutenu par une communauté élargie depuis des années ! Par contre Qt LUI n'est pas libre !

Cordialement Zestyr
-1
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
16 févr. 2010 à 15:52
Personnellement je trouve que le C# permet de faire des applications console ou juste de traitement des données très facilement :)

-1
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011 52
16 févr. 2010 à 17:20
J'aime beaucoup ta phrase "presque libre", autant dire qu'il ne l'est pas. :-) 
En conclusion, nous conseillons C++.


Quand je dis presque c'est parce que windows se garde une grosse parti de son environnement sinon il est libre.

C'est tout de même Microsoft qui s'occupe du bazar, donc soumis à ça bonne volonté. Faire tourné un prog C# sur Linux releve plus du bidouillage qu'autre chose. 


Comme a pu l'évoquer Scriptiz : ça existe le projet MONO !
Ainsi si tu développe un prog en C# avec la SDL il sera multiplate-form !
-1
C++ est en effet très utilisé mais tend à disparaître au profit des nouveaux langages (OCaml, Python, entre autres ... ) même si celui-ci est encore très prisé. Il est cependant plus complexe que C# et n'a pas de ramasse-miettes. En gros, là où C# automatise l'allocation de mémoire, tu es obligé de la gérer toi même dans C++.

Personnellement, je te conseillerais C#. Le Framework.NET est super bien foutu et tous les langages de celui-ci sont à la fois très simple d'apprentissage/utilisation et puissants.

Ceci n'est qu'un avis personnel. Rien ne t"oblige à le suivre.
-1
feadin91 Messages postés 257 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 28 avril 2010 89
16 févr. 2010 à 17:47
De plus, le Framework 4 devrait bientot sortir, ajoutant de nombreuses possibilités bien sympa pour tes appli' (je pense surtout à un système d'Add-In perfectionné, pour l'usage que je vais en faire ;-) )

Mais ceci n'est qu'un petit coup de pub, tu restes libre de ton choix.
0
.Flint. Messages postés 81 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 mai 2010 4
16 févr. 2010 à 20:56
Merci pour toutes vos réponses, si j'ai bien compris; le C++ est plus compliqué que le C# (en théorie et pratique) mais pour moi à première vue : question syntaxe ?
C# :
using System;

namespace HelloWorld
{
class Hello
{
static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
}
C++:
int main(void)
{
std::cout << "Hello world!" << std::endl;
return 0;
}


Le C# allèrent plus compliqué, non surtout pour les mots de 20 caractères... ? Après pour le C#, l'interface se fait comment ? en ligne de code ou grâce à un éditeur visuel (WPF ou win. expression) ? (comme pour C++ sur visual studio) et question compatibilité ? le net 3 = net 4 et ainsi de suite ?

Merci,
-1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 mai 2010 à 22:51
Bonjour,

Honnêtement, quand je lis les deux codes que tu fournis comme exemple, c'est bien le C++ qui me paraît le plus complexe ! Oui, c'est plus court. Mais quand tu lis le code, ne me dis pas que c'est plus compréhensible !

Xavier
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
14 juil. 2010 à 22:08
Comme l'a dit Reivax le C#, bien qu'il y ait quelques lignes en plus, est bien plus compréhensible au niveau des mots clés.

Sinon avec Visual C# Express ou Visual Studio, tu peux faire tes interfaces C# (WinForms ou WPF) très très facilement :)

Après pour ton tout petit code en C# tu peux aussi le simplifier comme ceci :
using System; 

class Hello 
{ 
	static void Main() 
	{ 
		System.Console.WriteLine("Hello World!"); 
	} 
} 


Si tu veux un bon exemple de la complexité du C++ regarde le code source d'une appli réseau, par exemple d'un bête serveur acceptant des connexions Websocket.

Tu verras qu'entre l'envoi de paquets héxa et d'autres trucs bien louche ça ne semble pas très clair, alors qu'en C# tout ça es rendu plus bas et tu bénéficie d'un code plus compréhensible même sans commentaires.

Enfin bon si tu veux faire du C++ c'est très bien aussi mais ça te demanderas surement plus de travail dans un premier temps.
0