« Programmation C/Types avancés » : différence entre les versions
Contenu supprimé Contenu ajouté
indentation uniforme dans tout le document (avant mélangeait 1, 4 et 8, espaces et tabulations) |
|||
Ligne 5 :
<source lang="c">
struct ma_structure {
...
} var1, var2, ..., varM;
</source>
Ligne 19 :
<source lang="c">
struct complexe {
} c;
Ligne 133 :
{
/* en C99 */
/*
/* printf("L'offset de 'champ2' vaut %zu.\n", offsetof(struct ma_structure, champ2)); */▼
printf("L'offset de 'champ2' vaut %zu.\n",
*/
/* en C90 */
printf("L'offset de 'champ2' vaut %lu.\n",
(unsigned long) offsetof(struct ma_structure, champ2)); return 0;
}
Ligne 149 ⟶ 153 :
imaginons 2 structures:
<source lang="c">
char *string;
char *string;
size_t len;
</source>
quelque soit la structure utilisé, on peut avec l'addresse et la cast (struct str *) accéder à la chaine.
<source lang="c">
{
sok.len = strlen(sok.string);
printf("%s\n", ((struct str *)p)->string);
}
p = &s;
printf("%s\n",((struct str_ok *)p)->string);
return 0;
</source>
<references />
Ligne 208 ⟶ 212 :
union type_union
{
};
Ligne 225 ⟶ 229 :
union _XEvent
{
};
</source>
Ligne 244 ⟶ 248 :
<source lang="c">
XEvent ev;
XNextEvent(display, &ev);
switch (ev.type) {
case ButtonPress:
printf("Le bouton %d a été pressé.\n", ev.xbutton.button);
break;
default:
printf("Message type %d\n", ev.type);
}
</source>
Ligne 261 ⟶ 265 :
#include <stdio.h>
#include <string.h>
struct s1 {
} s1;
struct s2{▼
▲struct s2 {
int ______;
int setnull;
union str{▼
struct s1 _s;▼
▲union str {
struct s2 s_;
}str;
typedef void * STR_s1;
typedef void * STR_s2;
STR_s2
string_analyse(STR_s1 *s)
{
{
return &us._s;
}
{
us.s_.setnull = 1;
return &us._s;
}
}
int main(void)
{
((struct s2 *)p)->string, ((struct s2 *)p)->len, ((struct s2 *)p)->setnull); ((struct s2 *)p)->string, ((struct s2 *)p)->len, ((struct s2 *)p)->setnull); ((struct s2 *)p)->string, ((struct s2 *)p)->len, ((struct s2 *)p)->setnull); "Même pour un petit vaisseau serial killer du monde d'en haut.\n"); }
</source>
Tout en permettant l'optimisation:
<source lang="c">
struct s1{
} s1;
union s {
struct s1 dbl[2];▼
void *perform[5];
};
</source>
Ligne 349 ⟶ 366 :
</tr>
</table>
ce qui signifie que:
<source lang="c">
int main(void)
{
2 *
((union s *)p)->perform[0] != (void *)0;
p += 16)
(char *)((union s *)p)->perform[1],
end[
!((char *)((union s *)p)->perform[2])]
);
}
</source>
Ligne 461 ⟶ 481 :
struct liste
{
};
</source>
Ligne 475 ⟶ 495 :
struct type_a
{
};
struct type_b
{
};
</source>
|