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.