Archive for the ‘Développement’ Category

Qt Creator en anglais

Wednesday, February 3rd, 2010

Mise à jour avril 2010 :

La technology preview de Qt Creator 2.0 montre qu’il est maintenant possible de changer la langue de l’interface depuis les préférences de l’application, en allant dans la section Environnement : Général des options.

Fin de la mise à jour.

Depuis la version 1.3.0, Qt Creator a été localisé dans plusieurs langues, en particulier le français. Dès lors, Qt Creator utilise automatiquement la langue du système d’exploitation.

Malheureusement, il n’y a aucun réglages au sein de l’application permettant de choisir une autre langue. Il peut en effet être très pratique dans certaines situations de démarrer Qt Creator 1.3.1 en anglais.

La solution diffère selon le système d’exploitation.

Mac OS X

La seule solution que j’ai trouvé avec Mac OS X pour forcer Qt Creator d’utiliser l’anglais est de l’empêcher de trouver le fichier de traductions du français. Pour ce faire, il faut sélectionner l’application Qt Creator, afficher le menu contextuel et choisir Afficher le contenu du paquet.

Lorsque le contenu est affiché, aller dans le répertoire Contents/Resources/translations/. Localiser le fichier qtcreator_fr.qm et le renommer (par exemple en _qtcreator_fr.qm).

Lors du prochain démarrage de Qt Creator, celui-ci ne trouvera pas le fichier de traductions pour le français (la langue du système d’exploitation) et se rabattra sur l’anglais.

Windows

Sous Windows, le plus simple est de définir la variable d’environnement LANG, que Qt Creator utilise en priorité (avant la langue du système d’exploitation) pour déterminer la langue de démarrage.

Pour ajouter une variable d’environnement, afficher les propriétés du Poste de travail.

Dans l’onglet Avancé, cliquer sur Variables d'environnement.

La liste des variables d’environnement apparaît. Ajouter une nouvelle variable pour l’utilisateur en cours en cliquant sur Nouveau.

Le nom de la variable d’environnement doit être LANG. Comme valeur pour cette variable, mettre en, ce qui signifie que que dorénavant, Qt Creator démarrera en anglais.

Trucs et astuces C++

Tuesday, February 2nd, 2010

Initialiser un tableau

Lorsqu’on déclare un tableau d’entiers, il arrive souvent que l’on préférerait que ses éléments soient initialisés à zéro.

Plutôt que de le faire manuellement dans une boucle :

int Tableau[30];

for (int i = 0; i < sizeof(Tableau)/sizeof(int); ++i)
   Tableau[i] = 0;

il est possible de l’initialiser directement ainsi :

int Tableau[30] = {};

Il est possible de n’initialiser que quelques premiers éléments avec des valeurs spécifiques. Les autres éléments seront automatiquement initialisés à zéro.

int Tableau[30] = { 543, 245, 738 };

endl et \n

En mode console, lorsqu’on souhaite faire un retour de chariot, quelle différence entre endl et \n ?

Tout d’abord, il faut préciser que \n est portable. Même si le retour de chariot est codé différemment selon les systèmes d’exploitation, l’implémentation des classes de flux (iostream) prend en charge ces différences.

Pour revenir à la différence, \n provoque un retour de chariot alors que endl provoque un retour de chariot et vide le flux de sortie (flush) ce qui garanti par exemple pour la sortie standard que le flux est immédiatement affiché.

Dans la plupart des cas, cette différence n’aura aucun impact sur le résultat obtenu sur la sortie standard. Elle peut avoir un léger impact sur la performance étant donné que endl fait plus de choses que \n.

Par contre, cette différence peut être importante si l’on travaille sur d’autres genres de flux. Par exemple si l’on envoie des informations sur un fichier de log et que l’on veut être sûr que ce log reflète l’état le plus récent du programme, alors l’usage de endl plutôt que \n permet de garantir que ce qui est envoyé dans le fichier de log l’est immédiatement.

Opérateur ternaire

L’opérateur ternaire est généralement utilisé sous cette forme :

string Texte = (Saisie == NombreMysterieux) ? "trouvé" : "raté";

Mais l’opérateur ternaire peut également être utilisé comme lvalue (valeur assignable) :

(A > B ? A : B) = 0;

ce qui est équivalent au code ci-dessous :

if (A > B)
   A = 0;
else
   B = 0;

Cette fonctionnalité peut néanmoins aboutir à un code illisible et dangereux !

Augmenter le niveau de warning avec Qt Creator

Friday, December 11th, 2009

Voici un petit programme C++ développé avec l’IDE Qt Creator :

#include <iostream>

int main() {
   short A = 60000;
   std::cout << "A vaut " << A << "\n";
   return 0;
}

À priori, très simple mais qui ne fonctionne pas comme désiré. Le problème ? L’affectation du nombre 60000 dans un short signé.

Malheureusement, lors de la compilation de ce programme, aucun warning n’est émis !

Pour augmenter le niveau de warning, il suffit de modifier le fichier projet (.pro) et d’y ajouter la ligne suivante :

QMAKE_CXXFLAGS_WARN_ON += -Wconversion

Pour être informé d’un maximum de warnings, il serait même judicieux d’y ajouter le flag -Wextra, ce qui aboutirait à la ligne suivante :

QMAKE_CXXFLAGS_WARN_ON += -Wconversion -Wextra

En plus des problèmes de conversion, il peut également y avoir des problèmes lors du passage d’un type signé vers non-signée et vice-versa. Pour détecter ces problèmes, il faut utiliser le flag –Wsign-conversion.

D’une façon générale, il peut même être pratique de considérer les warnings comme des erreurs, afin de ne rien laisser passer. Pour ce faire, il faut ajouter le flag -Werror, ce qui abouti à la ligne suivante :

QMAKE_CXXFLAGS_WARN_ON += -Wconversion -Wextra -Wsign-conversion -Werror