Cours C Avancé chapitre 2 et chapitre.pdfc79024186
Ce pdf permet d'avoir des connaissances vagues sur le langage de programmation C, ce qui pourrait s'avérer nécessairement de nos jours. Plusieurs points seront utilisés dans ce document.
Cours C Avancé chapitre 2 et chapitre.pdfc79024186
Ce pdf permet d'avoir des connaissances vagues sur le langage de programmation C, ce qui pourrait s'avérer nécessairement de nos jours. Plusieurs points seront utilisés dans ce document.
Objectif général : Acquérir les connaissances nécessaires à la programmation avec le langage Python
Objectifs opérationnels :
- Mémoriser des données primitives
- Traiter des données
- Communiquer avec l’extérieur
- Contrôler le flux d’exécution des instructions
- Mémoriser des données composites
- Découper et réutiliser du code
Swift est désormais open source ! "Google considérerait Swift comme un langage « de première classe » pour Android" pouvait-on lire en avril sur le réseau. Et enfin un portage Android du langage a été "merge" dans la base de code officielle de Swift.
Bon tout ceci est un bon prétexte pour apprendre ce nouveau langage et les possibilités qu'il peut nous apporter en terme de développement. Une comparaison avec Java sera notamment proposée afin de montrer les similitudes et differences entre ces deux langages .
Ce cours concerne la manipulation des chaines de caractères et les expressions régulières. La première partie présente la classe str Python ainsi que les opérations qu'il est possible de faire sur des objets str. La seconde partie concerne les expressions regulières qui permettent de valider des chaines de caractères ou d'en extraire des sous-chaines qui satisfont un motif donné. On y voit finalement comment utiliser le module re Python.
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
Le langage C++ a toujours la réputation d’un langage complexe, demandant une rigueur de tous les instants et qui peut en rebuter plus d’un. Mais avec l’arrivée de la nouvelle norme C++11 et de son intégration dans Visual Studio 11 (et intégration partielle dans Visual Studio 2010), elle permet comme le souligne Herb Sutter, d’écrire désormais du code "Clean, Safe and Fast", nous passons à l'ère du C++ moderne.
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24BenotGeorges3
Les informations et évènements agricoles en province du Luxembourg et en Wallonie susceptibles de vous intéresser et diffusés par le SPW Agriculture, Direction de la Recherche et du Développement, Service extérieur de Libramont.
https://agriculture.wallonie.be/home/recherche-developpement/acteurs-du-developpement-et-de-la-vulgarisation/les-services-exterieurs-de-la-direction-de-la-recherche-et-du-developpement/newsletters-des-services-exterieurs-de-la-vulgarisation/newsletters-du-se-de-libramont.html
Bonne lecture et bienvenue aux activités proposées.
#Agriculture #Wallonie #Newsletter #Recherche #Développement #Vulgarisation #Evènement #Information #Formation #Innovation #Législation #PAC #SPW #ServicepublicdeWallonie
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Formation
Suite à l'entrée en vigueur de la « Participation Financière Obligatoire » le 2 mai dernier, les règles du jeu ont changé !
Pour les entreprises, cette révolution du dispositif est l'occasion de revoir sa stratégie de formation pour co-construire avec ses salariés un plan de formation alliant performance de l'organisation et engagement des équipes.
Au cours de ce webinar de 20 minutes, co-animé avec la Caisse des Dépôts et Consignations, découvrez tous les détails actualisés sur les dotations et les exonérations, les meilleures pratiques, et comment maximiser les avantages pour les entreprises et leurs salariés.
Au programme :
- Principe et détails de la « Participation Financière Obligatoire » entrée en vigueur
- La dotation : une opportunité à saisir pour co-construire sa stratégie de formation
- Mise en pratique : comment doter ?
- Quelles incidences pour les titulaires ?
Webinar exclusif animé à distance en coanimation avec la CDC
6. Bibliographie pour aujourd'hui
• Dan Gookin, C for Dummies (2nd Edition)
– Chapitre 6, 24, 27 et 29
• Peter D. Hipson, Advanced C
– Chapitre 2, 3, 7, 14 et 15
• Steve Summit, C Programming Notes
– Chapitre 6, 8, 9, 10 et 11
6
8. Langage C
• Ecrit par Denis Ritchie, 1972
• Bell Labs
• A été écrit pour UNIX
• Portable
– Fonction sur presque toutes SE
• Macro Assembleur
• Fichiers .h et .c
• Diffèrent de C++
8
9. Standards C
• Original – K&R C
• Plus utilisé ANSI C (C89 ou C90)
• Plus stricte C99
– Plus de types des données
• Plus nouveau C11 et C18
• Embedded C
9
10. Bibliothèque C
• Libc
– fonctions qui sont disponible dans toutes les SE
• Pour un nouveau SE, c’est la premier
bibliothèque implémenté
• Exemple
– printf / scanf
– malloc / free
– fopen / fread
10
11. Compilateurs pour le langage C
• GNU Compiler Collection (gcc)
• Low Level Virtual Machine (llvm - clang)
• Microsoft Visual C++ (msvc)
• Intel C
11
12. La structure d’un program en C
// defines
#define VALUE 10000
...
// variables declaration
int main ()
{
// variables declaration
// statements (code)
return 0;
}
int f ()
{
// variables declaration
// statements (code)
}
12
29. malloc
void *malloc (size_t size);
size - nombre de octets demandée
renvoie:
• Succès: pointeur vers la mémoriel allouée
• Erreur: NULL
La mémoire alloue n’a pas toujours la valeur 0
int *s = (int*)malloc (sizeof (int))
pourquoi pas sizeof (4)?
29
30. calloc
void *calloc (size_t count, size_t size);
count – nombre d'objets à allouer
size – taille en octets d'objets à allouer
renvoie:
• Succès: pointeur vers la mémoriel allouée
• Erreur: NULL
La mémoire alloue este avec la valeur 0
// one item
int *s = (int*)calloc (1, sizeof (int));
// array of items
int *v = (int*)calloc (100, sizeof (int));
30
31. realloc
void *realloc (void *ptr, size_t size);
ptr - pointeur précédemment alloue
size - nombre nouveau de octets demandée
renvoie:
• Succès: pointeur vers la nouveau mémoriel allouée
• Erreur: NULL
La mémoire nouveau alloue n’a pas toujours la valeur 0
// resize the s array
s = (int*)realloc (s, 100*sizeof(int));
31
32. free
void free (void *ptr);
ptr - pointeur à libérer
free (s); // s does not become
NULL
s = NULL; // important
ptr ne change pas sa valeur en NULL
32
33. Fuite de mémoire
Il n'y a aucun moyen de libérer un pointeur
int *p = (int*)malloc (sizeof(int));
…
p = NULL; // p is leaked
33
Valgrind
valgrind.org
34. malloc – vérifiez le retour
int *s = (int*) malloc (sizeof (int))
if (s != NULL)
{
…
}
else
{
perror ("malloc");
abort ();
}
34
35. Déréférencer un pointeur
int a = 510;
int *p = NULL;
p = &a; // &a - address of variable a
printf ("%dn", a); // prints 510
printf ("%dn", p); // prints the address
of a
printf ("%dn", *p); // prints 510 (the
value at the address of a)
35
36. Déréférencer un pointeur
int *a = NULL;
a = (int*)malloc (sizeof(int));
if (a != NULL)
{
*a = 510;
printf ("%dn", a); // prints ...?
printf ("%dn", *a); // prints ...?
free (a);
a = NULL;
}
else
{
perror ("malloc");
abort ();
}
36
37. Déréférencer un pointeur
int *a = NULL;
a = (int*)malloc (sizeof(int));
if (a != NULL)
{
*a = 510;
printf ("%dn", a); // prints the address of a
printf ("%dn", *a); // prints 510
free (a);
a = NULL;
}
else
{
perror ("malloc");
abort ();
}
37
54. Pointeur sur une structure
struct File *file1 = NULL;
file1 = (struct File*)malloc ( ... ?);
54
55. Pointeur sur une structure
struct File *file1 = NULL;
file1 = (struct File*)malloc (sizeof(struct File));
55
56. Accès membre structure
struct File *file1 = NULL;
file1 = (struct File*)malloc (sizeof(struct File));
// pointer to a struct of type File
file1
// value from the memory location pointed by the pointer
*file1
// error, a pointer is an address, has no member
file1.name
// the value pointed is a struct that as a member
name
(*file1).name
56
57. Accès membre structure
// the value pointed is a struct
that as a member name
(*file1).name
file1->name
57
63. Tampon des donees avec 0
char buffer[BUFFER_SIZE];
memset (buffer, 0, BUFFER_SIZE);
// ...
// or
void *buffer = (void*)calloc (1, BUFFER_SIZE);
// ...
free (buffer);
63
64. Exemple
int main ()
{
void *temp_buffer = (void*)malloc (1024);
void *buffer = (void*)malloc (1024);
int f = open ("data.bin", O_RDONLY);
read (f, temp_buffer, 1024);
memcpy (buffer, temp_buffer, 1024);
close (f);
return 0;
}
64
65. Curseur tampon
// at location 0
memcpy (buffer, data, n);
memcpy (&buffer[0], data, n);
// at location p
memcpy (&buffer[p], data, n);
65
66. Exemple avec curseur
#define PARTS 10
#define BUFFER_SIZE 1024
int main ()
{
void *temp_buffer = (void*)malloc (BUFFER_SIZE);
void *buffer = (void*)malloc (BUFFER_SIZE * PARTS);
int f = open ("data.bin", O_RDONLY);
int part, position = 0, bytes;
for (part = 0; part < PARTS; part++)
{
bytes = read (f, temp_buffer, BUFFER_SIZE);
if (bytes > 0)
{
memcpy (&buffer[position], temp_buffer, bytes);
position = position + bytes;
}
}
close (f);
return 0;
}
66
67. Tampon des donees avec 0
• la mémoire allouée n'est pas définie sur 0
• les données dans la mémoire nouvellement
allouée sont aléatoires
• Fonctions
– calloc - clear allocate
– strncpy - copy empty string
– memset - memory set
67
68. Mot clés
• Langage C
• ANSI C
• C90
• Libc
• gcc
• llvm
• Visual C++
• POSIX
• Macro
• Pointeur
• NULL
• allocation
• désallocation
• c-string
• structure
• tampon de données
• access dans le tampon
• valeur de retour
68
69. Bibliographie pour aujourd'hui
• Dan Gookin, C for Dummies (2nd Edition)
– Chapitre 6, 24, 27 et 29
• Peter D. Hipson, Advanced C
– Chapitre 2, 3, 7, 14 et 15
• Steve Summit, C Programming Notes
– Chapitre 6, 8, 9, 10 et 11
69