/** * Exemple d'instructions C/C++ **/ // commentaire sur une ligne int main() { //fonction principale int a = 4; int b = 2; if ( a < 0 ) { // condition a=5; } else { // contre condition b=3; } while ( a != b ) { // boucle b=b+1; } for (int i=0;i<5;i++) { // boucle indexée b=b+a; } switch (b) { // branchement multiple case 0 : a = -1; break; case 1 : a = 0 ; break; default : a = b; break; } do { a=b+2; } while ( a < b ); // si condition re-boucle return a; // retour de valeur }
Le reste est plus exotique et dépands plus du compilateur/OS :
bytes, unsigned char, signed bytes, long, short ...
& boolean (C++)
int tab[10]; /* reservation en mem de 10 case pour contenir des int (10 octets) la 1ere case est a l'ad 'tab' */ tab[2] : /* le valeur du contenu de la (0eme ,1eme ) 2eme case (soit 3cases) le contenu de ( l'ad du 1er ele + 2 cases ) cette ad en obtenue par &(tab[2]) */ equivaut à : char tab[10]; // 10 case reserve a partir de l'ad tab *tab ; // le char qui est a l'ad tab *(tab+3) ; // le char contenu a l'ad (tab+3) (tab+6) ; // adresse = Ad(tab) + 6 * taille d'une case tab[6]; // le char a la 6eme case <=> *(tab+6) &tab[0] = tab = &*tab; [] et * => contenus & => l'ad d'un contenu ---- void f (char d[]) ; <=> void f (char *d); dans les deux cas d est l'ad du 1er element (peut etre \0 ) ---- char *t[]; t[] ; un tableau de case de meme type debutnat a l'ad t; * t[] ; la valeur d'une case est prise comme adresse d'un contenu char *t[] : de type char t : l'ad du tableau (d'adresse de char) (*t) : l'ad du 0eme element du tab; *(*t) : le contenu de ( ^^^ ) t [] [] [] [] [] [ t[5] ] [ *(t+6) ] [] [] \ \ \ [ *(*(t+0)) ] [c] [h] [a] [i] [n] [e] [ *((t[0])+6) ] [\0]Pour eviter cette notation lourde on simplifie par si on veux acceder a 'a'
char *t[]; char* x; x = t[0]; // l'ad printf("%c", *(x+4) );
On passe en param dans les fonctions
- des variables de longueur 1 ou 2 octets ( int, char ) si on veux passer plusieur vars, - soit un tableau de long n - il faut juste l'@ de ce tab - et la longeur - ou evetuellement la valeur du dernier element du tab ( ex %s => \0 ) On peux passer un tableau de tableau de pionteur de tableau de char mais il faut faire au plus simple !!!
scanf nécessite: - @ où stocker la valeur - Type de cette val (-> taille ie %f=4octets ; %s...\0) --- Mais on ne s'interesse pas aux @ mais aux valeurs, (cad contenus de l'@ du type specifie dans le scanf ) printf nescessite - Type a reprenter %d %f %u %c %s - Valeur dans le type specifier SAUF: %s => adresse de la chaine se terminant par \0 --- int a; /* => %d */ scanf("%d", &a); /* on retrouve le type int%d et notre ad */ printf("%d", a ); /* notre typage suit la valeur (a) */ On ne parle plus d'adresse puisque on connais le contenu de l'@ soit la valeur de la variable a --- int *a; a est une ad dont son contenu est de type int; scanf("%d",a); /* a est bien une ad , le type (%d) est le meme que son contenu */ printf("%d",*a); /* printf opere sur une valeur , variable ici le contenu *a de l'ad a */ printf("%d",5); <=> printf("5");
pour generer un executable (comprenssible par l' OS) - il faut .c / .cc => .o => .exe -c * Pre-prossesing : - Analyse lexicale / syntaxique (grammaire) - interprete les # * Compilation : - traduire le source en lang evolue (C,pascal) => langage simpliste (assembleur) gcc -c f.c -o f.o => f.o * Linker : - Acrocher chaque objets gcc -o runme utilise.o principal.o -lm (lib maths) gcc -o runme utilise.o principal.o -lg++ (lib c++) * Execution du fichier binaire : % runme Automatisation de toutes ces etapes avec un fichier makefile
Deux solutions : gcc -D _UNIX file.c ou sinon dans la makefile CC = gcc DEFINES = -D_UNIX -D_`uname -s` .c.o: $(CC) -c $(DEFINES) $(CFLAGS) $<.c ... mais je te conseille d'utiliser la variable "_Linux" (tel quel) comme ca tu peux otomatiser avec la commande uname -s
t[m][n]; v[m*m]; for(i ..m ) for(i ..m ) v[i*n+j] = t[i][j];
\a alarme \b retour arrière (backspace) \f saut de page (lineFeed) \n rupture de ligne (newline) \r retour chariot (cariage return) \t tabulation horizontale \v tabulation verticale \' simple quote \" double quote \\ backslash \? point d'interrogation \0 fin de chaine
#define min2(a,b) { if (a > b) return a; return b; }
Symbole
#define RzR // definit le symbole #undef RzR // annule le symbole, macro... #ifdef RzR // si s deja defini [...] #else // non definit [...] #endif #ifndef [...] #else [...] #endif // idem mais inverse :-) #if [...] #elif [...] #endif #error [...] // genere une erreur #line Numero ["NomFichier"] // pour modifier le numéro de la ligne courante // et le nom de fichier courant traité par le préprocesseur #pragma : ?
http://rzr.online.fr/prog.htm - 1999 - Last modified: Thu Jan 31 14:44:43 MET 2002
Philippe_COVAL(a)Yahoo.COM - http://rzr.online.fr
[ RzR | INDEX | SEARCH | ME | TOOLS | WEB DESIGN | VISUAL | ARTICLES | MUSIC | E-M@IL ]