Nouvelle norme du C++

Darktib Message lu Posté le 02 Jan 2008 à 19:55 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Bon, pour eviter a tous les googlephobistes de passer des heures a chercher, je met ici pas mal de renseignements concernants la nouvelle norme C++ 0x, qui sera sans doute la C++ 09, et donc qui sortira sans doute en 2009.

Je ne vais pas faire mon propre article, mais mettre pas mal d'articles, puis faire une petite synthese.

Attention, l'article va etre tres long^^


Wikipedia :

Wikipedia a écrit :

C++0x est la nouvelle norme prévue pour le langage C++ en informatique. Elle a pour but de remplacer la norme existante, ISO/IEC 14882, publiée en 1998 et mise à jour en 2003. Ces dernières sont plus connues sous le nom informel de C++98 et C++03. La nouvelle norme introduira plusieurs nouveautés au langage initial, ainsi que de nouvelles fonctionnalités à la bibliothèque standard du C++ comme la plupart des bibliothèques du "Technical Report 1", à l'exception de la bibliothèque de fonctions mathématiques spéciales. Cette norme n'étant pas à l'heure actuelle finalisée, cet article pourrait ne pas refléter l'état d'avancement courant de C++0x, qui est publié sur le site de comité de la norme ISO C++.Le rapport le plus récent, N2432, a été publié en Octobre 2007.

Le comité de normalisation ISO/CEI JTC1/SC22/WG21 du C++ a pour but de présenter la nouvelle norme en 2009 (par conséquent la norme appellée actuellement C++0x s'appellera C++09), ce qui signifie que le document doit être prêt pour ratification par les membres de l'ISO en 2008. Pour pouvoir finir en temps et en heures, le comité a décidé de concentrer ses efforts sur les solutions apportés jusqu'a 2006 et d'ignorer toutes les nouvelles propositions.

Un langage de programmation comme le C++ suit une évolution qui permettra aux programmeurs de coder plus rapidement, de façon plus élégante et permettant de faire du code maintenable. Ce processus soulève inévitablement des questions de compatibilité avec le code existant, ce qui s'est produit de temps en temps pendant le processus de développement du C++. Cependant, d'après l'annonce faite par Bjarne Stroustrup (l'inventeur du langage C++ et membre du comité), la nouvelle norme sera presque compatible à 100% avec la norme actuelle.




Comme dit précedemment, les changements du langage C++ seront situés autant dans le langage initial, que dans la bibliothèque standard.

Durant le développement de chaque fonctionnalité de la nouvelle norme, le comité a appliqué les directives suivantes :

Garder la stabilité et la compatibilité avec le C++98 et, si possible, avec le C.
Préférer l'introduction de nouvelles fonctionnalités par la bibliothèque standard, plutôt que par le langage lui-même.
Préférer les changements qui peuvent faire évoluer les techniques de programmation.
Améliorer le C++ pour faciliter la mise en place de systèmes et de bibliothèques, plutôt qu'introduire de nouvelles fonctionnalités seulement utiles pour des applications spécifiques.
Augmenter la protection des types en fournissant des alternatives plus sécurisées que les actuelles, plutôt non sécurisées.
Augmenter les performances et les capacités à travailler directement avec le matériel.
Proposer des solutions propres aux problèmes actuels.
Implémenter le principe du "zero-overhead"
Rendre le C++ facile à apprendre et à enseigner sans enlever les fonctionnalités requises par les programmeurs experts


La norme apportera pas mal de nouveautés, nottament pour les classes, templates, threads, etc...
Les applications multi-threads pourront avoir une memoire locale a un thread, et un modificateur volatile.

Les classes:
Je vais mettre le texte en anglais, puis une traduction.
Je ne pourrait pas tout traduire tout l'article en 1 seule fois, evidemment^^




Wikipedia anglais a écrit :

Classes are an important feature of C++. The C++0x changes to class features focus on making class hierarchies easier to work with and less fragile.


[edit] Constructor delegation
In standard C++, constructors are not allowed to call other constructors - each constructor must construct all of its class members itself, which often results in duplicate initialization code.

C++0x will allow constructors to call other peer constructors (known as delegation). This will allow constructors to utilize another constructor's behavior with a minimum of added code. Other languages, such as Java, provide this.

The syntax will be:

class SomeType
{
int number;

public:
SomeType(int newNumber) : number(newNumber) {}
SomeType() : SomeType(42) {}
};
This comes with a caveat: C++03 considers an object to be constructed when its constructor finishes executing, but C++0x will consider an object constructed once any constructor finishes execution. Since multiple constructors will be allowed to execute, this will mean that each delegate constructor will be executing on a fully-constructed object of its own type. Derived class constructors will execute after all delegation in their base classes is complete.


[edit] Constructor inheritance
In standard C++, when a derived class is created from a base class, the derived class has an entirely separate set of constructors. The derived class may call base class constructors and forward parameters to them, but the user must create each constructor separately. Since this is merely rote work, it can be prone to causing user error.

C++0x will allow a class to specify that constructors will be forwarded. This means that the C++0x compiler will generate code to perform the forwarding of the call. Note that this is an all-or-nothing feature; either all of that base class's constructors are forwarded or none of them are. Also, note that there are restrictions for multiple inheritance, such that you cannot forward from two classes that use constructors with the same signature. Nor can you later declare a constructor with a signature that matches a forwarded constructor.

The syntax will be as follows:

class BaseClass
{
public:
BaseClass(int iValue);
};

class DerivedClass : public BaseClass
{
public:
using default BaseClass;
};

[edit] Member initializers
In standard C++, members of classes are initialized only in constructors. C++0x will allow the following syntax for initializing members:

class SomeClass
{
private:
int iValue = 5;
};
Any constructor will initialize iValue with 5 if the constructor does not override the initialization with its own, as follows:

class SomeClass
{
public:
SomeClass() {}
explicit SomeClass(int iNewValue) : iValue(iNewValue) {}

private:
int iValue = 5;
};
The empty constructor will initialize iValue as the class states, but the constructor that takes an int will initialize it to the given parameter.


[edit] Allow 'sizeof' to work on members of classes without an explicit object
In standard C++, the sizeof operation can be used on types and objects. But it cannot be used to do the following:

struct SomeType { OtherType member; };

sizeof(SomeType::member); //Does not work.
This should return the size of OtherType. C++03 does not allow this, so it is a compile error. C++0x will allow it.


[edit] Defaulting/deleting of standard functions on C++ objects
In standard C++, the compiler will provide, for objects that do not provide for themselves, a default constructor, a copy constructor, a copy assignment operator operator=, and a destructor. As mentioned, the user can override these defaults by defining their own version. C++ also defines several global operators (such as operator=, and operator new) that work on all classes, which the user can override.

The problem is that there are very few controls over the creation of these defaults. Making a class inherently non-copyable, for example, requires declaring a private copy constructor and copy assignment operator and not defining them. Attempting to use these functions will cause a compiler or linker error. However, this is not an ideal solution.

Further, in the case of the default constructor, it is useful to want to explicitly tell the compiler to generate it. The compiler will not generate a default constructor if the object is defined with any constructors. This is useful in many cases, but it is also useful to be able to have both a specialized constructor and the compiler-generated default.

C++0x will allow the explicit use, or disuse, of these standard object functions. For example, the following type explicitly declares that it is using the default constructor:

struct SomeType
{
SomeType() = default; //The default constructor is explicitly stated.
SomeType(OtherType value);
};
Alternatively, certain features can be explicitly disabled. For example, the following type is non-copyable:

struct NonCopyable
{
NonCopyable & operator=(const NonCopyable&) = delete;
NonCopyable(const NonCopyable&) = delete;
NonCopyable() = default;
};
A type can be made impossible to allocate with operator new:

struct NonNewable
{
void *operator new(std::size_t) = delete;
};
This object can only ever be allocated as a stack object or as a member of another type. It cannot be directly heap allocated without non-portable trickery. (Since placement new is the only way to call a constructor on user-allocated memory and this use has been forbidden as above, the object cannot be properly constructed.)

The = delete specifier can be used to prohibit calling any function, which can be used to disallow calling a member function with particular parameters. For example:

struct NoDouble
{
void f(int i);
void f(double) = delete;
};
An attempt to call f() with a double will be rejected by the compiler, instead of performing a silent conversion to int. This can be generalised to disallow calling the function with any type other than int as follows:

struct NoDouble
{
void f(int i);
template<class T> void f(T) = delete;
};

[edit] Explicit conversion operators
Standard C++ added the explicit keyword as a modifier on constructors to prevent single-argument constructors to be used as implicit type conversion operators. However, this does nothing for actual conversion operators. For example, a smart pointer class may have an operator bool() to allow it to act more like a primitive pointer: if it includes this conversion, it can be tested with if(smart_ptr_variable) (which would be true if the pointer was non-null and false otherwise). However, this allows other, unintended conversions as well. Because C++ bool is defined as an arithmetic type, it can be implicitly converted to integral or even floating-point types, which allows for mathematical operations that are not intended by the user.

In C++0x, the explicit keyword can now be applied to conversion operators. As with constructors, they prevent further implicit conversion.


[edit] Modification to the definition of plain old data
In standard C++, a struct must follow a number of rules in order for it to be considered a plain old data (POD) type. There are good reasons for wanting a number of types to fit this definition, as doing so causes implementations to produce object layouts that are compatible with C, as well as using initializer lists. However, the list of rules in C++03 is very strict, moreso than is necessary to gain the benefits of POD types.

C++0x will relax several rules with regard to the POD definition.

A class/struct is considered a POD if it is trivial, standard-layout, and it has no non-static members that are not PODs. A trivial class or struct is defined as one that:

Has a trivial default constructor. This may use the aforementioned default constructor syntax (SomeConstructor() = default;).
Has a trivial copy constructor, which may use the default syntax.
Has a trivial copy assignment operator, which may use the default syntax.
Has a trivial destructor, which may not be virtual.
A standard-layout class or struct is defined as one that:

Has only non-static data members that are of standard-layout type
Has the same access control (public, private, protected) for all non-static members
Has no virtual functions
Has no virtual base classes
Has only base classes that are of standard-layout type
Has no bases classes of the same type as the first defined non-static member
Either has no base classes with non-static members, or has no non-static data members in the most derived class and at most one base class with non-static members. In essence, there may be only one class in this classes hierarchy that has non-static members.







Déléguation du constructeur :
les constructeurs d'une classe pourront appeller un autre constructeur. Cette fonctionnalite, déja inplémentée dans Java, permettra d'utiliser le comportement d'un autre constructeur avec un minimum de code
exemple :
Code :
class SomeType
{
  int number;
 
public:
  SomeType(int newNumber) : number(newNumber) {}
  SomeType() : SomeType(42) {}
};



Héritage du constructeur
Initialiseurs d'attributs
Sizeof sur les attributs de classes sans objet explicite
Suppression et mise à défaut des fonctions standards des objets
Opérateur de conversion explicite
Liste d'initialiseurs
Modification de la définition des POD (Plain Old Data)


Un nouveeau type apparaitra, le type tuple:
Un tuple est une collection de dimension fixe d'objets de type différents. Tous types d'objets peut être élément d'un tuple. Cette nouvelle fonctionnalité est implémentée dans un nouveau header et bénificie des extensions de C++0x comme :

Paramètres template infini
Référence sur référence
Arguments par défaut pour les fonctions template
La définition de la classe templatée tuple est :

Code :
template <class... Types> class tuple;
Un exemple de définition et d'utilisation du type tuple :

typedef tuple< int, double, long &, const char * > test_tuple ;
long lengthy = 12 ;
test_tuple proof( 18, 6.5, lengthy, "Ciao!" ) ;
lengthy = get<0>(proof) ;  // Assigne à 'lengthy' la valeur 18.
get<3>(proof) = " Beautiful!" ;  // Modifie la 4ème valeur du tuple


Il est possible de créer le tuple proof sans définir son contenu si les éléments du tuple possède un constructeur par défaut. De plus, il est possible d'assigner un tuple à un autre tuple : si les deux tuples sont de même type, il est nécessaire que chaque élément du tuple ait un constructeur par copie, sinon il faut que les types de chaque élément de l'opérande droite soit compatible avec le type correspondant dans l'opérande gauche ou que l'élément correspondant de l'opérande gauche ait un constructeur approprié.

Code :
typedef tuple< int , double, string       > tuple_1 t1 ;
typedef tuple< char, short , const char * > tuple_2 t2( 'X', 2, "Hola!" ) ;
t1 = t2 ;  // Ok, les deux premiers élément peuvent être convertis
           // Le troisième peut être construit à partir du 'const char *'.


Les opérateurs relationnels sont disponibles (pour les tuples ayant le même nombre d'éléments). Deux expressions sont introduites pour vérifier les caractéristiques d'un tuple (à la compilation) :

Code :
tuple_size<T>::value retourne le nombre d'éléments du tuple T, 
tuple_element<I, T>::type retourne le type de l'objet placé en position I du tuple T. 


Autre nouveauté : les tables de hachages.
Definition :Une table de hachage est une structure de données qui permet une association clé-élément, c'est-à-dire une implémentation du type abstrait table de symboles.

On accède à chaque élément de la table via sa clé. Il s'agit d'un tableau ne comportant pas d'ordre (un tableau est indexé par des entiers). L'accès à un élément se fait en transformant la clé en une valeur de hachage (ou simplement hachage) par l'intermédiaire d'une fonction de hachage. Le hachage est un nombre qui permet la localisation des éléments dans le tableau, typiquement le hachage est l'index de l'élément dans le tableau. Une case dans le tableau est appelée alvéole.

un annuaire représenté comme une table de hachage.Tout comme les tableaux, les tables de hachage permettent un accès en O(1) en moyenne, quel que soit le nombre d'éléments dans la table. Toutefois le temps d'accès dans le pire des cas peut être de O(n). Comparées aux autres tableaux associatifs, les tables de hachage sont surtout utiles lorsque le nombre d'entrées est très important.

La position des éléments dans une table de hachage est pseudo-aléatoire. Cette structure n'est donc pas adaptée pour accéder à des données triées. Des types de structures de données comme les arbres équilibrés sont généralement plus lents (en O(log n)) et sont plus complexes à implémenter mais maintiennent une structure ordonnée.

Le fait de créer un hash à partir d'une clé peut engendrer un problème de collision, c’est-à-dire qu'à partir de deux clés différentes, la fonction de hachage pourrait renvoyer la même valeur de hash, et donc par conséquent donner accès à la même position dans le "tableau". Pour minimiser les risques de collisions, il faut donc choisir soigneusement sa fonction de hachage.


Donc, voici les infos de la nouveauté :
Intégrer les tables de hachage (conteneurs associatifs non ordonnés) dans la bibliothèque standard du C++ est l'une des demandes les plus récurrentes. Cela n'avait pas été réalisé pour la norme actuelle (celle écrite en 1995 et approuvée en 1998) à cause des contraintes de temps. Bien que cette solution soit moins efficace que les arbres équilibrés dans le pire des cas (en cas de collisions importantes), elle est cependant la meilleure dans la plupart des applications réelles.

Les collisions seront seulement gérées par du chaînage linéaire, parce que le comité ne considère opportun de standardiser des solutions de d'adressage ouvert qui introduit un nombre important de problèmes intrinsèques (en particulier, quand la suppression d'éléments est permise). Pour éviter les conflits de noms avec les bibliothèques non standards, qui ont leur propre implémentation des tables de hachage, on utilisera le préfixe unordered, au lieu de hash.

Cette nouvelle fonctionnalité intégrera quatre types de table de hachage, différenciées selon si elle accepte ou non des éléments avec la même clé (clé unique ou clé équivalente), et si elle associe chaque clé à valeur associée.

Ces nouvelles classes remplissent toutes les demandes des classe de conteneurs, et contient toutes les méthodes nécessaires pour accéder aux éléments : insert, erase, begin, end.

Ces classes n'ont pas nécessitées les nouvelles extensions du langage C++, seulement une petite extension du header <functional> et l'introduction des headers <unordered_set> et <unordered_map>. Aucun autre changement aux classes de la norme actuelle n'est nécessaire, et elles ne dépendent d'aucune autre extension de la bibliothèque standard.


Tout un tas de nouvelles fonctions mathematiques seront ajoutées, comme les integrales exponentielles, les polynomes de Legendre généralisés, les fonctions zeta de Riemann, etc...
En tout, 23 nouvelles fonctions mathematiques (pour l'instant !)

Bon, ca fait pas mal de choses (meme si je n'ai pas tout mis^^) et perso je trouve la nouvelle norme tres complete, a part deux ou trois truc...
Donc, maintenant, la question (implicite en lisant l'article) : Que pensez-vous de cette norme?

Liens :
Article Wikipedia francais
Article Wikipedia anglais
Site du Standart Committee
Site de l'université de Waterloo, lien sur l'interview de Bjarne Stroustrup
Une courte introduction au C++0x
Dernière édition le 25 Juin 2008 à 18:18
noob4ever Message lu Posté le 02 Jan 2008 à 20:22 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
Dommage que le C++ n'adopte pas la programmation fonctionelle, vraiment dommage ... OCaml aurait été finit :love:

et puis je trouve certain mécanisme des template bizarre ...

enfin bon, vivement ça sortit car des ajouts m'interessent beaucoup moi !
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Darktib Message lu Posté le 04 Jan 2008 à 14:56 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
C'est quoi la programmation fonctionnelle ? :rolleyes:
noob4ever Message lu Posté le 04 Jan 2008 à 15:52 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
http://fr.wikipedia.org/wiki/Programmation_fonctionnelle

regarde ce comparatif : http://www.ffconsultancy.com/languages/ray_tracer/comparison.html
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
noob4ever Message lu Posté le 04 Jan 2008 à 15:59 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
Je peux pas m'empecher de vous faire partager ça : http://blog.developpez.com/index.php?blog=73&title=visual_studio_2008_et_mfc_de_gros_change&more=1&c=1&tb=1&pb=1

et moi qui croyais que les Winforms il y avait que ça de vrai en APi WIN32

:love:
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Darktib Message lu Posté le 04 Jan 2008 à 16:07 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
La programmation fonctionnelle m'a l'air bien complexe...Sans variables globales ca doit etre dur...

Pour les winforms, je savait qu'il existait d'autres choses, mais par contre je n'ai utilisé ni les winform ni le reste...
Meme si j'ai fait quelques interfaces^^
Mod Message lu Posté le 04 Jan 2008 à 16:09 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
En voilà un bien joli jouet :). Ca pourrait être bien sympa de développer des applications avec ce look :tongue: .

N'hésites pas à poster un nouveau sujet pour ce genre d'infos :wink: .
noob4ever Message lu Posté le 04 Jan 2008 à 16:16 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
"Pour les winforms, je savait qu'il existait d'autres choses, mais par contre je n'ai utilisé ni les winform ni le reste...
Meme si j'ai fait quelques interfaces^^ "

Si tu veux faire des winforms ( des vrais ) je te conseille C#, sinon tu peux faire des sortes de winforms en C++/CLI ( c'est pas du C++ mais sa y ressemble ). Tu as un editeur de ressource avec Visual Studio, vraiment pratique. Avantage non négligeant de MFC : manipulation de sockets facile :)

Microsoft reprend le controle des GUI :cool: plus besoin de bibliothèque tierce
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Darktib Message lu Posté le 04 Jan 2008 à 16:21 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Et moi qui avait installé Qt^^ :wink:
En fait, les vraies interfaces que j'ai faites, c'etait en DarkBASIC Pro :rolleyes: Mais ca rendait bien quand meme^^
noob4ever Message lu Posté le 04 Jan 2008 à 16:24 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
Qt à 2/3 trucs pas cool quand même

licence pas très avantageuse pour une entreprise

Obligé de compiler avec un Makefile sous windows, ou alors il faut faire un GROS bricolage, et je sais même pas si c'est possible avec Visual Studio.

bref c'est bon pour les linuxiens cette lib :twisted:

par contre wxWidgets :love:
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
shadosan Message lu Posté le 04 Jan 2008 à 16:48 Bulle
Avatar de shadosan
Explorateur

Messages : 194
GCPoints : 8461

Citation :

par contre wxWidgets :love:


... est compliqué à installer et a une syntax parfois douteuse :proud:

sinon, les articles me donne faim ^^ vivement 2009 ! ( lol )
Darktib Message lu Posté le 04 Jan 2008 à 16:51 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Qt a les signaux et les slots.
Par contre c'est vrai que qusetion licnce... il y a pas photo^^
Pour le makefile, c'est pas trop compliqué, suffit de taper 3 commandes dans la console^^

Par contre wxwidgets : je sais pas quel pack installer, y en a 3 tonnes...
Mais je sais quelle est puissante : c'est avec cette librairie qu'a ete develeoppé Code::Blocks
noob4ever Message lu Posté le 04 Jan 2008 à 17:06 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
perso, pour installer wxWidgets j'ai pas trouvé d'autre moyen que de compiler la bibliothèque entière.
Pour ceux qui veulent, vous pouvez y arriver très facilement en téléchargeant cette video qui est sur mon site faite par un ukrainien qui montre pas a pas comment faire :

http://www.malloc-web.com/download/wxVC2005.avi


@Darktib

je ne dis pas le contraire, le problème après c'est pour debugger, moi j'ai pas envie de passer en ligne de commande pour ce genre de manipulation ...
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
shadosan Message lu Posté le 04 Jan 2008 à 17:12 Bulle
Avatar de shadosan
Explorateur

Messages : 194
GCPoints : 8461
bah moi pour Qt, sur windows xp, j'utilise Notepad++ et un raccourci de la console direct vers le dossier à compiler (pas besoin de faire de cd cheminVersDossier) et ensuite je fait qmake et make.

sur Kubuntu 7.10 , j'utilise Kate, et pour compiler j'ai fait un script perso, donc il me suffit d'un click de souris, sans passer par la console ^^
Dernière édition le 04 Jan 2008 à 17:13
noob4ever Message lu Posté le 04 Jan 2008 à 17:14 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
et pour debugger ?
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
shadosan Message lu Posté le 04 Jan 2008 à 17:16 Bulle
Avatar de shadosan
Explorateur

Messages : 194
GCPoints : 8461
je compile pour que la console soit activé et je fait afficher des petit messages aux endroits / moments que je veux.
j'utilise jamais de débuggeur en tant que tel.
noob4ever Message lu Posté le 04 Jan 2008 à 17:18 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
:hurt: tu es suicidaire toi !
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
shadosan Message lu Posté le 04 Jan 2008 à 17:22 Bulle
Avatar de shadosan
Explorateur

Messages : 194
GCPoints : 8461
meuhh non ^^ [edit : juste maso :lol: ]
la preuve, j'men suis toujours bien sortit :proud:
Dernière édition le 04 Jan 2008 à 17:24
Darktib Message lu Posté le 05 Jan 2008 à 15:42 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
C'est dur sans débuggeur...
Enfin, j'ai vu un jour un site sur lequel ils expliquaient comment configurer Code::Blocks pour compiler directement avec QT (sans console), mais c'etait il y a longtemps et je me souciens plus du site... :rolleyes:
Parait en tout cas que c'est galere^^
gus Message lu Posté le 05 Jan 2008 à 15:48 Bulle
Avatar de gus
Explorateur

Messages : 371
GCPoints : 52046
C'est pas tres compliquer,il suffit juste de dire a code::blocks les repertoires...Moi je l'ai fait sa m'a pris 10mn/15mn
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0626 secondes