Skip to main content

C - Cheat-Sheet

formation-langage-c-avance.jpg

Introduction

Le langage C est un langage de bas niveau qui doit être compilé avant d'être exécuté.

Variables

En C, les variables ont 4 caractéristiques :

  • Un type (int, float, char ou void)
  • Un identifiant (un nom).
  • Une valeur (correspondant au type).
  • Une adresse mémoire (en hexadécimale).

Voici les différents types de variables avec leur taille associé en octet ainsi que leurs valeur minimum et maximum :

Types de variables.png

Déclaration

  • Entier :
int myInteger = 0;
  • Flottant :
float myFloat = 26.34;
  • Caractère :
char myChar = 'J';
// Avec le code ASCII (caractère 'A')
char myChar = 65;
  • Chaîne de caractères (tableau de char terminant par '\0') :
char name[256]="Elieroc";
  • Tableau :
int monTableau[5]={1, 4, 7};
  • Constante (en majuscule) :
const float PI = 3.14;
  • Statique (la valeur reste en mémoire après avoir quittée la fonction appelante) :
static int maVariableStatique = 2;
  • Préprocesseur :
#define LONGUEUR (15)

Bibliothèques

  • Standard :
#include <stdlib.h>
  • Standard Input/Output :
#include <stdio.h>
  • String (pour les chaînes de caractères :
#include <string.h>

Assert (pour les vérifications) :

#include <assert.h>

Fonctions

Déclaration / Implémentation

En C, on distingue le prototype d'une fonction de son implémentation. Le prototype n'est pas indispensable mais utile lorsqu'on souhaite implémenter les fonctions après la fonction main par exemple.

  • Prototypage :
float calculator(float op1, float op2);
  • Implémentation :
float calculator(float op1, float op2){
    return op1 + op2;
}

Type et valeur de retour

Chaque fonction a un type qui doit correspondre à sa valeur de retour :

int myFunc(){
    return 3;
}

Cette valeur de retour peut être stockée dans une variable :

myVar=myFunc(); // '3'

Main

Tout programme en langage C présente la fonction main qui sera naturellement appelée lors de l’exécution du programme :

int main(){

  return 0;
}

Printf

La fonction printf() permet d'afficher des éléments dans la sortie standard (souvent il s'agit de la console).

printf("Hello world !");

Elle prend en charge les flags pour afficher des variables :

printf("Mon entier : %d et mon flottant : %f \n", myInt, myFloat);

Remarque : On notera la présence du caractère '\n' pour marquer le retour à la ligne.

Scanf

La fonction scanf() permet de récupérer des éléments de l'entrée standard (souvent il s'agit du clavier).

Ici, la valeur est transmise dans la variable myInt :

scanf("%d", &myInt);

Remarque : Il fonctionne avec les flags comme printf.

Commentaires

Commentaire sur une seule ligne :

// Mon commentaire

Commentaire sur plusieurs lignes :

/*
  Mon commentaire
  en plusieurs lignes
*/

Cast (transtypage)

  • Passer d'un flottant à un entier :
int myInteger = (int)myFloat;

Les flags

Pour certaines fonctions, il peut être nécessaire d'utiliser des flags (ex : printf ou scanf).

Voici la liste des flags les plus courants :

Flags
Types de variables
%d
int
%f
float
%c
char
%s
string

Les conditions

If
int niveau = 18;

if (niveau < 5 || niveau == 18) 
{
    printf("Yop");
} 

If / Else

int niveau = 18;
if (niveau < 5 || niveau == 18) 
{
    printf("Yop");
} 
else 
{
    printf("Hoho");
}

Switch

int age = 18;
switch(age)
{
case 18:
    printf("Tu as la majorité !");
    break;
case 100:
    printf("Tu es centenaire !");
    break;
default:
    break;
}

Ternaire

int age = 16;
(age == 15) ? printf("tu as 15 ans") : printf("Interdit pour toi");

Les boucles

While

int i = 0;
while (i<10){
    printf("Waou !\n");
    i++;
}

For

int i;
for (i = 0 ; i<5 ; i++){
    printf("Ce message est affiché 5 fois\n");
}
  • Parcourir un tableau :
int monTableau[5];
for (int i = 0 ; i < 5 ; i++)
{
   monTableau[i] = i*3;
}

Tableaux

 

Pointeurs

Un pointeur est une variable qui stocke une adresse mémoire.

Déclaration

int nb1 = 5;
int *pt_nb1 = &nb1;

Utilisation

  • Le caractère & placé devant l'identifiant de la variable fait référence à l'adresse de celle-ci.
  • Le caractère * placé devant l'identifiant de la variable fait référence à la valeur stockée dans la variable derrière le pointeur.
void exchange(float*nombreA, float*nombreB)
{
    float tmp = *nombreB;
    *nombreB = *nombreA;
    *nombreA = tmp;
}

int main(){

    float nombreA = 6.8;
    float nombreB = 9.45;

    printf("A = %.2f | B = %.2f\n", nombreA, nombreB);
    exchange(&nombreA, &nombreB);
    printf("A = %.2f | B = %.2f", nombreA, nombreB);

    return 0;
}