Les types de données

En C/C++, nous retrouvons les types simples de Java tels que int, float ou char, mais contrairement à Java, la taille de ces types n’est pas définie et dépend de la machine pour laquelle est compilé le code. Un int sera sur 2 octets sur une machine 16 bits ou sur 4 octets sur une machine 32 ou 64 bits.

Une autre différence est que le C/C++ propose des types entiers non signés.

On peut souvent se contenter d’entiers dont la taille correspond à celle de la machine, mais nous avons aussi parfois de spécifier une taille précise. Nous pouvons le faire un utilisant la bibliothèque stdint.

En C, nous importons la bibliothèque avec #include <stdint.h> et nous avons maintenant accès (entre autres) aux types suivants :

  • uint8_t
  • int8_t
  • uint16_t
  • int16_t
  • uint32_t
  • int32_t
  • uint64_t
  • int64_t

Un u en préfixe signifie unsigned.

En C++ nous pouvons aussi utiliser #include <stdint.h>, mais pour éviter de “polluer” le “namespace” de C++, il serait préférable d’utiliser #include <cstdint> (avec un c au début et pas d’extension). On devrait alors préfixer chaque type avec std:: (par exemple std::int32_t), mais ça devient long à écrire et la plupart des implémentations de cstdlib mettent aussi les types dans le “namespace” global et nous pouvons les utiliser sans le préfixe std::. Aucune solution n’est vraiment élégante et si vous voulez éviter le préfixe std:: alors nous vous recommandons d’utiliser #include <stdint.h> comme en C.

Le type char en Java est sur 16 bits et encode les caractères en UTF-16. En C/C++, le type char est en général sur 8 bits et est soit signé, soit non signé.

En C il n’y a pas de type boolean et on utilise un int à la place. Il n’y a pas non plus de true ou de false mais un 0 représente faux et tout ce qui est différent de zéro représente vrai. En C++ le type bool, ainsi que les constantes true et false ont été ajoutés.

En C, une chaîne de caractère n’est autre qu’un tableau de caractères (char[]). Le caractère avec le code ASCII 0 marque la fin de la chaîne. Il faut toujours prendre en compte ce caractère de fin, et si on a besoin d’une chaîne de n caractères, il nous faut un tableau de taille n+1. En C++, la bibliothèque standard offre un type string avec des caractéristiques semblables à celui de Java sauf que les String en Java sont immuables alors que le contenu des string de C++ peut être modifié.

Pour comparer des chaînes de caractères représentés par un tableau de caractères, vous pouvez utiliser la fonction strcmp ou strncmp de la bibliothèque string (à importer avec #include <string.h>). Pour les chaînes de caractères représentés par le type string de la bibliothèque standard, vous pouvez simplement les comparer avec l’opérateur ==. Contrairement à Java, C++ permet de redéfinir les opérateurs et ça permet de relier l’opérateur == à une méthode qui compare les deux objets.