/** * 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* a : a est une ad dont le contenu est de type int
int *a : le contenu de l'adresse a est de type int (identique)
int *a; &(*a) = a;
char a; &a; => l'add reservee pour a *(&a) = a;
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
pour generer un executable (comprenssible par l' OS) - il faut .cc / .cpp => .o => .exe -c * Pre-prossesing : - Analyse lexicale / syntaxique (grammaire) - interprete les # * Compilation : - traduire le source en lang evolue (C,pascal) => langage simpliste (assembleur) % g++ -c -o f.o f.cpp => f.o * Linker : - Acrocher chaque objets % g++ -o runme utilise.o principal.o -lm (lib maths) * Execution du fichier binaire : % ./runme ---- Si on utilise des libraries Par example la lib malib : /lib-dir/include/malib.h /lib-dir/lib/libmalib.so (ou /lib-dir/lib/libmalib.a) Compil : g++ -c -o f.o f.cpp -I/lib-dir/include Link: g++ -o runme utilise.o principal.o -lmalib -L/lib-dir/lib --- Automatisation de toutes ces etapes avec un fichier makefile
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 : ?
/** * @author: Philippe.COVAL - http://rzr.online.fr/ * @version: 2000.10.27/s **/ #include/** * Vieille methode C : passage par addresse **/ int decompose(int nb,int* u,int* c,int* d) { int tu,tc,td; // variables temporaires pour un soucie de lisibilitee tc=nb/100; td=(nb/10-tc*10); tu=(nb-tc*100-td*10); *u = tu; *c = tc; *d = td; } /** * Local les valeurs retournees sont = a celle envoyées * donc inutile pour les fonctions , soit procedure **/ int decompose2(int nb,int u,int c,int d) { int tu,tc,td; // variables temporaires pour un soucie de lisibilitee tc=nb/100; td=(nb/10-tc*10); tu=(nb-tc*100-td*10); u = tu; c = tc; d = td; } /** * Bonne Methode C++ * la reference est l'equivalent du pointeur en C **/ int decompose3( const int nb,int &u,int &c,int &d) { int tu,tc,td; // variables temporaires pour un soucie de lisibilitee tc=nb/100; td=(nb/10-tc*10); tu=(nb-tc*100-td*10); u = tu; c = tc; d = td; } int main() { int u=0,c=0,d=0; int n=423; decompose(n,&u,&c,&d); cout<,<"n="<,<n<,<endl; cout<,<"dn = "<,<c<,<" "<,<d<,<" "<,<u<,<endl; // dn = 4 2 3 u=0,c=0,d=0; decompose2(n,u,c,d); cout<,<"dn = "<,<c<,<" "<,<d<,<" "<,<u<,<endl; // dn = 0 0 0 u=0,c=0,d=0; decompose3(n,u,c,d); cout<,<"dn = "<,<c<,<" "<,<d<,<" "<,<u<,<endl; // dn = 4 2 3 return 0; }