« Introduction au langage C/Types » : différence entre les versions

Contenu supprimé Contenu ajouté
Thierry46 (discussion | contributions)
m →‎Définition : Petit complément types
Thierry46 (discussion | contributions)
→‎Types de base : Ajout chapitre Nouveaux types introduits par C99
Ligne 112 :
4 / 5 = 0.000000 ou (float)4 / (float)5 = 0.800000
</pre>
 
===Nouveaux types introduits par C99===
La norme ISO C99, section 7.8 à introduit de nouveaux types, pour les entiers signés ou non, qui permettent d'améliorer la portabilité des programmes. Les includes [[w:en:stdint.h|stdint.h]] et [[w:en:inttypes.h|inttypes.h]] permettent de les utiliser.
 
<source lang="c">
/*
Nom : typec99.c
Auteur : Thierry46
Role : Manipulation de types C99
Pour produire un exécutable avec le compilateur libre GCC :
gcc -Wall -pedantic -std=c99 -o typec99.exe typec99.c
Pour exécuter, tapez : ./typec99.exe
Version : 1.0 du 14/5/2008
Licence : GNU GPL
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
 
int main(void)
{
int_fast16_t n1, n2, resu;
n1 = INT16_C(300);
n2 = INT16_C(400);
resu = n1 + n2;
(void)printf("n1 = %"PRIdFAST16"\n"
"n2 = %"PRIdFAST16"\n"
"n1 + n2 = %"PRIdFAST16"\n",
n1, n2, resu);
// Impression des limites pour les nombres entiers
(void)printf("INT_FAST16_MAX = %"PRIdFAST16"\n", INT_FAST16_MAX);
(void)printf("INTMAX_MAX = %"PRIdMAX"\n", INTMAX_MAX);
return EXIT_SUCCESS;
}
</source>
 
Affiche :
<pre>
n1 = 300
n2 = 400
n1 + n2 = 700
INT_FAST16_MAX = 32767
INTMAX_MAX = 9223372036854775807
</pre>
 
Explications :
* <code>int_fast16_t n1, n2, resu;</code> déclare trois entiers signés 16 bits. Il est demandé de choisir un types machine d'au moins 16 bits qui assure une bonne performance de calcul ('''fast''').
* <code>n1 = INT16_C(300);</code> initialise n1 en utilisant la macro INT16_C(valeur) pour créer une constante du type correspondant.
* <code>(void)printf("n1 = %"PRIdFAST16"\n"</code> utilise dans le format d'impression de <tt>printf</tt> l'indicateur de conversion PRIdFAST16 défini dans [[w:en:inttypes.h|inttypes.h]] qui signifie :
** '''PRI''' : indicateur pour les fonctions de la famille <tt>printf</tt>. Pour la famille <tt>scanf</tt> se serait '''SCN'''
** '''d''' : spécificateur classique de conversion, on pourrait aussi utiliser : i, o, x...
** '''FAST''' : pour un type C99 fast (rapide à calculer). il existe aussi LEAST.
** '''16''' : Nombre de bit minimum pour le stockage.
* <code>(void)printf("INT_FAST16_MAX = %"PRIdFAST16"\n", INT_FAST16_MAX);</code> : cette instruction affiche le plus grand entier INT_FAST16_MAX stockable dans le type int_fast16_t en utilisant le spécificateur de format adapté PRIdFAST16. INT_FAST16_MIN contient elle la plus petite valeur négative de ce type.
* <code>(void)printf("INTMAX_MAX = %"PRIdMAX"\n", INTMAX_MAX);</code> : cette instruction affiche le plus grand entier INTMAX_MAX stockable dans le type intmax_t en utilisant le spécificateur de format adapté PRIdMAX.
* Pour utiliser des entiers non signés, faites précéder les types par u et les constantes par U.
 
== Tableau ==