Outils pour utilisateurs

Outils du site


gcc_c99

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…

gcc_c99.txt · Dernière modification: 2009/11/30 15:23 par thierry