3.3 Variables

Les variables sont des espaces qui permettent de stocker des valeurs. En C, les variables sont déclarées avec un type, un nom et une valeur; la valeur peut être modifiée à tout moment, contrairement à Ocaml. Voici un exemple :

int x = 42;

Dans cet exemple, la variable x est déclarée avec le type int et la valeur 42. La syntaxe suit donc ce paterne type nom = valeur;.

Équivalent en Python & Ocaml

Python:

x = 42

Ocaml:

let x: int = 42;;

Les types de données les plus courants en C sont :

struct

Les types structurés sont comme ceux en Ocaml:

struct Human {
    int age;
    float height;
};

Utilisation:

struct Human bob = { .age = 24, .height = 847.0 };

Human n'est pas directement un type, nous pouvons le voir grâce au struct juste avant Human. Afin de ne pas avoir à mettre à chaque fois struct, nous pouvons utiliser typedef:

typedef struct Human {
    int age;
    float height;
} Human;

Human jean = { .age = -73, .height = 176.0 };

C'est bien plus clair!
Ici, le premier Human définit le nom de la structure de donnée, et le deuxième est le nom du type.

enum

Pareil que pour struct, c'est comme en Ocaml:

enum Days {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};

La représentation en mémoire est simplement un entier, de 0 à 6 ici.

Utilisation:

enum Days day = Sunday;

Et les strings ?

Il n'y a pas de type string à proprement parler, si nous voulons créer une chaîne de caractères, nous devons la définir plus précisement pour la mémoire. En général, elles sont représentées par un tableau de caractères, comme ceci:

char nom[] = "Heisenberg";

Ici nous avons utilisé char, malheureusement ce n'est qu'un seul caractère, pas suffisant pour écrire "Heisenberg", alors nous ajoutons [] après le nom de la variable pour définir un array. Mais il faut attendre 3 chapitres pour plus d'explications ;)


À noter qu'il n'y a pas non plus de booléen par défaut, mais vous pourrez utiliser #include <stdbool.h> pour avoir true et false.

Les conversions de types sont également possibles en C. Par exemple, on peut convertir un entier en nombre à virgule flottante:

int x = 87;
float y = (float)x;  // cela donnera la valeur 87.0

Sachez que certaines conversions sont faites automatiquement, cela s'appelle la conversion "implicite". Dans ce cours nous allons au maximum l'éviter car ça rend le code moins compréhensible et peut même le rendre mauvais.

Les opérateurs sont utilisés pour effectuer des opérations sur les variables. Les opérateurs les plus courants sont:

Toutes les opérations sont faites avec 2 valeurs de même type (deux int ou encore deux float).

Il existe pour chaque opérateur une version dite "immédiate", cela veut dire qu'on applique direment l'opération sur la variable. Voici un exemple:

int x = 420;

// Ces deux instructions sont équivalentes
x = x + 1;
x += 1;

Nous pouvons même utiliser l'opérateur ++ et -- pour compacter encore plus le code, mais ça peut rendre le code moins lisible...:

int y = 70;
y--;  // Équivalent à y -= 1;