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_tint8_tuint16_tint16_tuint32_tint32_tuint64_tint64_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.