Utilisateur:Regards sur sciences/C

Une page de Wikiversité, la communauté pédagogique libre.

À l'écrit, on travaille toujours sous l'hypothèse que les entêtes suivants ont tous été inclus: <assert . h>, <stdbool . h>, <stddef . h>, <stdint . h>, <stdio . h>, <stdlib . h>.

Traits généraux[modifier | modifier le wikicode]

  • Typage statique. Types indiqués par le programme lors de la déclaration ou définition.
  • Passage par valeur.
  • Délimitation des portées par les accolades. Les retours à la ligne et l'indentation ne sont pas signifiants mais sont nécessaires pour la lisibilité du code.
  • Déclaration et définition de fonctions, uniquement dans le cas d'un nombre fixé de paramètres.
  • Gestion de la mémoire: pile et tas, allocation statique et dynamique, durée de vie des objets.

Définitions et types de base[modifier | modifier le wikicode]

  • Types entiers signés int8_t, int32_t et int64_t, types entiers non signés uint8_t, uint32_t et uint 64_t. Lorsque la spécification d'une taille précise pour le type n'apporte rien à l'exercice, on utilise les types signé in-t et non signé unsigned int. Opérations arithmétiques +, —, I, *. Opération 'h entre opérandes positifs. Ces opérations sont sujettes à dépassement de capacité. À l'écrit, on élude les difficultés liées à la sémantique des constantes syntaxiques. On ne présente pas les opérateurs d'incrémentation.
  • Le type char sert exclusivement à représenter des caractères codés sur un octet. Notation '\O' pour le caractère nul.
  • Type double (on considère qu'il est sur 64 bits). Opérations
  • Type bool et les constantes true et f aise. Opérateurs ! , &&, 11 (y compris évaluation paresseuse). Les entiers ne doivent pas être utilisés comme booléens, ni l'inverse.
  • Opérateurs de comparaison ==, ! =, <, >, <=, >=.
  • Les constantes du programme sont définies par cons-t type c = y. On n'utilise pas la directive du préprocesseur #define à cette fin.

Types structurés[modifier | modifier le wikicode]

  • Tableaux statiques: déclaration par type T[s] où s est une constante littérale entière. Lecture et écriture d'un terme de tableau par son indice T[i] ; le langage ne vérifie pas la licéité des accès. Tableaux statiques multidimensionnels.
  • Définition d'un type structuré par struct nom _s {type1 champ1; ... type, champ,,; } et ensuite typedef struct nom _s nom (la syntaxe doit cependant être rappelée si les étudiants sont amenés à écrire de telles définitions). Lecture et écriture d'un champ d'une valeur de type structure par u. champ ainsi que u-> champ. L'organisation en mémoire des structures n'est pas à connaître.
  • Chaînes de caractères vues comme des tableaux de caractères avec sentinelle nulle. Fonctions strl en, strcpy, strcat.

Structures de contrôle[modifier | modifier le wikicode]

  • Conditionnelle if (c) 5T' if (c) 5T else SJ.
  • Boucle while (c) s; boucle for (mit; fin; incr) s, possibilité de définir une variable dans mit; break.
  • Définition et déclaration de fonction, passage des paramètres par valeur, y compris des pointeurs. Casparticuliers: passage de paramètre de type tableau, simulation de valeurs de retour multiples.

Pointeurs et gestion de la mémoire[modifier | modifier le wikicode]

  • Pointeur vers un objet alloué, notation type* p = &v. On considère que les pointeurs sont sur 64 bits.
  • Déréférencement d'un pointeur valide, notation *p. On ne fait pas d'arithmétique des pointeurs. * Pointeurs comme moyen de réaliser une structure récursive. Pointeur NULL.
  • Création d'un objet sur le tas avec malloc et sizeof (on peut présenter size_t pour cet usage mais sa connaissance n'est pas exigible). Libération avec f ree.
  • Transtypage de données depuis et vers le type vo id* dans l'optique stricte de l'utilisation de fonctions comme mal loc.
  • En particulier: gestion de tableaux de taille non statiquement connue; linéarisation de tels tableaux quand ils sont multidimensionnels.

Divers[modifier | modifier le wikicode]

  • Utilisation de asser-t lors d'opérations sur les pointeurs, les tableaux, les chaînes.
  • Flux standard.
  • Utilisation élémentaire de printf et de scanf. La syntaxe des chaînes de format n'est pas exigible.
  • Notion de fichier d'en-tête. Directive #include "fichier.h".
  • Commentaires /* ... */ et commentaires ligne //

Traits généraux et divers[modifier | modifier le wikicode]

  • Utilisation de #define, #ifndef et #endif lors de l'écriture d'un fichier d'en-tête pour rendre soninclusion idempotente.
  • Rôle des arguments de la fonction int main(int argc, char* argv []);utilisation des argumentsà partir de la ligne de commande.
  • Fonctions de conversion de chaînes de caractères vers un type de base comme atoi.
  • Définition d'un tableau par uninitialisateur{t0, t1, ..., t_}.
  • Définition d'une valeur de type structure par un initialisateur { . c1 = y1, . c2 = y2, • . . }.
  • Compilation séparée.

Gestions des ressources de la machine[modifier | modifier le wikicode]

  • Gestion de fichiers: f open (dans les modes r ou w), f close, fscanf, fprintf avec rappel de la syntaxe de formatage.
  • Fils d'exécution: inclusion de l'entête pthread.h, type pthread_t, commandes pthread_create avec attributs par défaut, pthread_j oin sans récupération des valeurs de retour.
  • Mutex: inclusion de l'entête pthread . h, type pthread_mutex_t, commandes pthread_mutex_lock, pthread_mutex_unlock, pthread_mutex_destroy.
  • Sémaphore: inclusion de l'entête semaphore . h, type sem_t, commandes sem_init, sem_destroy, sem_wait, sem_post.