dimanche 26 mai 2013

Eclipse for C/C++

Vous cherchez à bien démarrer, rapidement à développer en Langage C et C++ sur la plateforme de développement Eclipse. Nous allons voir ce qu'il faut faire.

https://www.eclipse.org/
Eclipse Foundation

Eclipse Download

http://www.eclipse.org/downloads/
Eclipse for C/C++ Windows 32bits 131 Mo

By a book :
http://pothi.com/pothi/book/ebook-meera-ghumalia-cc-software-development-eclipse

Eclipse Juno Documentation
http://help.eclipse.org/juno/index.jsp

Once you installe Double clic on :
\\eclipse-cpp-juno-SR2-win32\eclipse\eclipse.exe

Message de l'exécutable :
A Java Runtime Environment (JRE) or a Java Development Kit (JDK) must be available in order to run Eclipse

Eclipse Installation JRE

Depending on what you want to do with Eclipse. If you intend to use Eclipse for Java development, then you should install a JDK

I will work with Windows, so I install JRE.

http://wiki.eclipse.org/Eclipse/Installation#Install_a_JVM

Vérification de la machine Java Installée

http://java.com/fr/download/installed.jsp

(Version 7 Update 21).

Lancer l'exécution de eclipse.exe

choix du workspace : C:\Documents and Settings\Administrateur\workspace

Create New Project

Création d'un projet GCC Cross Compilation :

C:\Documents and Settings\Administrateur\workspace\Hello World C++ Project Cross GCC

Oups !

Description Resource Path Location Type
Symbol 'cout' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 13 Semantic Error
Program "g++" not found in PATH Hello World C++ Project Cross GCC [Discovery Options] page in project properties C/C++ Problem
Symbol 'endl' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 13 Semantic Error
Program "make" not found in PATH Hello World C++ Project Cross GCC C/C++ Problem
Symbol 'std' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 10 Semantic Error
Program "gcc" not found in PATH Hello World C++ Project Cross GCC [Discovery Options] page in project properties C/C++ Problem

Création d'un projet Microsoft Visual C++ :

C:\Documents and Settings\Administrateur\workspace\Hello World Microsoft Visual C++

Oups !

Description Resource Path Location Type
LNK1104: cannot open file 'kernel32.lib' Hello World Microsoft Visual C++ line 0 C/C++ Problem


Oulala ça pique un peu Eclipse ...
 

vendredi 24 mai 2013

Design Patterns en C++

Vous recherchez des Design Patterns écrits en C++, nous allons voir ensemble ce que l'on peut trouver sur ce sujet primordial du Langage C++. Les Design Patterns sont un sujet important lorsque l'on veut passer d'un développement artisanal à un développement professionnel.

Comment faut-il utiliser les design patterns ? Les plus sages diront qu'il ne faut surtout se jeter dessus pour en mettre partout. Il faut les utiliser avec parcimonie uniquement lorsque cela est utile pour l'architecture de votre code.

C'est pour cela qu'il faut bien connaitre les Design Patterns et savoir quand les utiliser à bon escient.

WikiBooks - C++ Programming/Code/Design Patterns

En Anglais sur le site wikibooks :

WikiBooks - C++ Programming: Code patterns design

Présentation très complète des patterns en C++, avec à chaque fois, le code en C++ : une mine d'or ! Une référence.

Trois grands types de Patterns

Creational Patterns
Structural Patterns
Behavioral Patterns

Developpez.com - Design Patterns en C++

Sur le site Developpez.com

Développez.com - Présentation des principaux design patterns en C++

Prototype : Class dont le but est d'être clonée
Créer un tas de gros objets (en taille mémoire) peut créer des problèmes de performance de l'application.
Il dispose d'une méthode obligatoire : Clone()

std::auto_ptr : cette class est obsolète en C++11. La nouvelle class est unique_ptr qui supprime automatiquement l'objet qu'il pointe.

Singleton : Assurer l'existence d'une seule instance de certaines Class
exemple d'un driver de son qui ne doit être instancié qu'une fois
en C++ on utilisera le Template Class

Factory : ou fabrique en français classe dont le rôle est de créer d'autres objets.

Décorateur : permet d'étendre dynamiquement le rôle d'une classe de base

Observateur : être prévenu lors de changement d'une donnée

Stratégie : pattern permettant de changer d'algorithme utilisé de façon dynamique.

Source Making Design Patterns

Un site très complet sur le développement logiciel UML, Design Patterns, AnitPatterns, Refactoring :

SOURCE MAKING - Design Patterns

Des exemples graphiques amusants ... des implémentation dans les différents langages vraiment complet. 

Et la définition des AntiPattern. Lorsque l'on s'intéresse de prés aux design patterns autant savoir de qu'est un anti-pattern.

Refactoring Gurru - Design Patterns

Je ne connaissais pas, il y a toujours de nouveaux arrivants qui se mettent dans le game des design patterns, voici :

Refectoring guru - Design Patterns in C++

Le truc sympathique c'est la représentation graphique des design patterns ce qui permet, lorsqu'on les connait un peu, de les retrouver facilement et comprendre à quoi elles servent d'un coup d'oeil. Les exemples de code en C++ sont très bien présentés. C'est très bien fait.


Les évolutions du Langage C++

MSDN de Septembre 2011, étrange ? Le moins que l'on puisse dire c'est que la  société de Redmond ne respecte pas totalement les normes du Langage C++ en ayant parcouru parfois la doc MSDN c'est souvent parce que Microsoft avait proposé une solution pour adresser un problème, solution qui n'a pas été choisie par la norme du coup Microsoft n'a pas fait l'effort de s'adapter mais a conservé "ses vieux trucs".

New Language Features in Visual C++

La copie d'écran est là pour témoigner car depuis cette documentation sur les évolutions du Langage C++ a été retirée.

But it's not the best practices, they can be founded here.

Étrange, s'agit-il d'un ajout au C++ spécifique au compilateur de Microsoft ? En effet, cela ne concerne les caractéristiques du compilateur Visual C++ 2005.

En tous cas le meilleur site pour connaitre les évolutions du Langage C++ c'est : cppreference.com

Les évolutions du Langage C++ sur le site cppreference.com

En face des rubriques, vous pouvez voir les références aux différentes du C++  de C++14 à C++23.

STL - Librairies standards du C++

Qu'est ce qu'il y a dans les libraires standards du C++ ? Il y a un minimum à connaitre pour connaitre les fonctionnalités que l'on peut développer très rapidement simplement en utilisant les librairies standards du C++.

Wikipédia - C++ Standard Library

Containers

<array>new in C++11 fixed sized array.
<bitset>a bit array.
<deque>a double-ended queue.
<forward_list>a singly linked list.
<list>a doubly linked list.
<map>sorted associative array and multimap.
<queue>a priority queue.
<set>sorted associative containers or sets.
<stack>a stack.
<unordered_map>hash tables.
<unordered_set>
<vector>a dynamic array.

General

<algorithm>
<chrono>time elements, duration, time_point, and clocks.
<functional>Provides several function objects, designed for use with the standard algorithms.
<iterator>Provides classes and templates for working with iterators.
<memory>Provides facilities for memory management in C++, including the class template std::unique_ptr.
<stdexcept>Contains standard exception classes such as std::logic_error and std::runtime_error, both derived from std::exception.
<tuple>a tuple.
<utility>working with object pairs (two-member tuples), and the namespace std::rel_ops, for easier operator overloading.
Localization
<locale>Defines classes and declares functions that encapsulate and manipulate the information peculiar to a locale.
<codecvt>code conversion facets for various character encodings.

Strings

<string>
<regex>using regular expressions.
Streams and input/output
<fstream>
<iomanip>formatting integers and the precision of floating point values.
<ios>
<iosfwd>
<iostream>
<istream>
<ostream><sstream><streambuf>

Language support

<exception>the base class of all exceptions thrown by the Standard Library.
<limits>properties of fundamental numeric types.
<new>C++ memory management.
<typeinfo>Provides facilities for working with C++ run-time type information.
Thread support library
<thread>working with threads.
<mutex>mutual exclusion: mutexes, locks, and call once.
<condition_variable>synchronization primitives used to block a thread until notified by some other thread that some condition is met or until a system time is reached.
<future>C++ program can use to retrieve in one thread the result (value or exception) from a function that has run in the same thread or another thread.

Numerics Library

<complex>complex numbers.
<random>(pseudo-)random numbers
<valarray>
<numeric>numeric operations.

Introduction à la STL (Standard Template Librairy)

La librairie nous livre une implémentation des Containers (vecteurs, listes chaînées, ensemble de données ordonnées.

Il est primordiale de choisir parmi les classes de la STL, celle qui est adaptée à votre besoin. En choissant une mauvaise classe trop complexe pour votre besoin, vous perdriez un temps de calcul considérable.

Cet article détaille l'utilisation et la complexité des différents objets de la STL : pair, list, vector, set, map.

CCM - Introduction à la STL en C++ (standard template library)

Autres librairies du C++

  • Apache C++ Standard Library
  • Boost (C++ libraries)
  • C POSIX library
  • C standard library
  • Standard library
  • C++ Technical Report 1
  • Les bons sites en Langage C++

    Personnellement, j'ai toujours trouvé ce que je cherchais, Ici :

    http://www.cplusplus.com/reference/
    CPlusPlus.com

    To Be Continued

    jeudi 23 mai 2013

    Langage C++

    Vous cherchez les caractéristiques principales du Langage C++. Vous développez dans d'autres langages comme VB, Java ou C# alors pour vous remettre rapidement au C++, voici les caractéristiques du Langage C++.

    Introduction

    Langage de programmation créé en 1979 chez Bell Labs par Bjarne Stroustrup, c'est une surcouche du langage C pour en faire un langage Objet.

    Les normes ISO : 1998 (C++98), 2003 (C++03), 2011 (C++11), 2014 (C++14) et 2020 (C++2020) ...

    Documentation complète et à jour du langage C++ est disponible sur la page Wiki :

    cppreference.com

    Vous pouvez, dans l'url, remplacer "en." par "fr." pour avoir le site en français.

    Le standard C ++ 11 est une extension majeure du standard C ++ après C++ 98

    auto: déclaration de type autodéductible par la déclaration

    auto i = 0, d = 0.0; // i is int and d double

    decltype: est utile lors de la déclaration de types difficiles ou impossibles à déclarer à l'aide de la notation standard, comme les types liés à lambda ou les types qui dépendent de paramètres de modèle.

    C++14 est souvent appelée correction de bogue de C++11

    C++03 corrige les rapports de défauts de C++98

    Mots clefs en C++

    Microsoft - Keywords (C++)
    C'est l'entrée de la doc complète, un peu spécifique Microsoft, des explications trop longues.

    Comment Ca Marche - Mots clés du C++
    Les mots clefs communs au C et au C++ sont indiqués en caractères gras.

    Petits rappels sur les mots clefs en C++  :

    auto : Déclare une variable dont le type est déduit de son initialisation. Utile lors de l'utilisation d'expressions lambda.

    friend : Permet à une fonction ou une classe d'accéder aux membres privés et protégés d'une classe.
    Une fonction déclarée friend est une fonction qui n'est pas membre d'une classe mais qui a accès aux membres privés et protégés de la classe.

    mutable : S'applique aux données membres non statiques et non constantes d'une classe. Permet à une fonction déclarée const de modifier cette variable.

    register : Spécifie que la variable doit être stockée dans un registre de l'ordinateur, si possible.

    const_cast : Supprime les attributs const, volatile et __unaligned d'une classe..modifie le cast d'une constante afin de pouvoir la modifier.

    delegate : Déclare un type qui représente un pointeur de fonction.

    Lambda expressions

    Cours en C++

    Cprogramming.com - Learn C and C++ Programming

    En anglais mais c'est une Somme, tout sur la programmation en langage C et C++. Achetez son livre pour soutenir ce travail colossale. Il y a les réponses à toutes les questions des exemples de programmation de projets complets.

    Pour réviser rapidement, des questionnaires (quiz en C en C++), ludiques :

    Cprogramming.com - C++ and Computer Science Quizzes

    The basics of C++ : 1 - C, 2 - C, 3 - A, 4 - B, 5 - C, 6 - B, 7 - D

    Allocation de mémoire en C/C++

    En langage C++, comme en langage C, un très gros problème c'est l'allocation mémoire. Où sont les objets, comment sont-ils instanciés et libérés lorsque le programme n'en a plus besoin, en sachant que toutes allocation en dehors d'une mémoire libre et c'est le crash !

    Developpez.com - Allocation de mémoire sécurisée en C et C++

    C'est un début, il faut redéfinir les fonction d'allocation de base, malloc, realloc et free pour en faire des fonctions qui :

    • gèrent les cas d'échec 
    • lister les pointeurs libres ou non libres
    • allouer et désallouer avec vérification de possibilité

    Attention : haypo s'est fait racheter son nom de domaine "haypocalc.com" pointe maintenant vers tout autre chose ... LoL.

    Même si malloc et free existent en C++, il est préférable d'utiliser new et delete ... surtout si l'on travaille avec des objets.

    En cas d'échec new lève une exception de type std::bad_alloc et le programmeur n'a plus à écrire le test déprécié :

    if( NULL==data ) error();

    Il faut également noter que caster malloc est considéré comme une erreur la méthode utilisée pas les programmeurs expérimentés est :

    double *p;
    p = malloc( n * sizeof (*p ));

    Design Patterns en C++

    Sur ce blog :

    Langage C++ - Design Patterns en C++

    Un sujet indispensbale

    Class, Agrégation, Héritage, Polymorphism

    Pour aller plus loin :

    DriveSodevlog - support C++

    Merci à IUT Informatique Bordeaux 1