Table des matières
Pour les vieux cons de mon genre, voici quelques evolutions du C …
c99
Lien: http://nicolasj.developpez.com/articles/c99/
Avec gcc
, si necessaire, ajouter :
-std=c99
Mais ce ne l'est plus depuis gcc > 3 …
Enfin, ca depend: L'option est parfois nécessaire; le plus souvant, non.
vite dit
inline
inline
est reconnu pour “macrofier” une fonction.
le static
est le bienvenu dans les “include”
static inline int carre(int x) { return( x*x ); }
long long
represente au moins 64 bits…
accompagné des notations ll
ou L
__func__
Le numéro de la ligne est en LINE
, alors que le nom de la fonction est en:
__func__
Declarer, quelque part, comme cela:
static const char __func__[];
Exemple:
printf("la fonction courante: %s\n", __func__ );
tableau dynamique
On peut declarer des tableaux de taille dynamique sur la pile !
(on peut oublier la fonction alloca
)
int function( int x ) { char tableau[x]; // ... etc... }
Encore plus fort:
for( i=1; i<10; i++ ) { long tableau[i]; printf("%d tableau de taille: %d\n",i,sizeof(tableau)); }
output:
1 tableau de taille: 4 2 tableau de taille: 8 3 tableau de taille: 12 ...
structure
initialiser
On peut initialiser le contenu d'une structure comme ça:
struct T { int a; int b; int c; }; struct T toto = { .b = 123, .c = 456 };
Et sur la pile, c'est possible avec des valeurs non connus (non constante)…
tableau en fin
On peut faire:
struct T { int len; char string[]; };
“string” a une taille indefinie, mais commence a la fin de la structure.
Chaines
Pourquoi associé une chaine et une variable !?
Voila que ça marche aussi comme cela:
for( int i=0; ; i++ ) { // ----------------------------- char c = "Hello Word!" [i]; // ----------------------------- if ( !c ) { printf("\n"); break; } else printf("%c",c); }
Resultat:
Hello Word!
bien sur…