home *** CD-ROM | disk | FTP | other *** search
- // P⌐íklad: Programování v C++ na FJFI - ÇVUT
- #pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
- #include <iostream.h>
- #include <conio.h>
- #define N 100
- #define sqr(x) x*x
- #define sqr2(x) (x)*(x)
- #define sqr3(x) ((x)*(x))
- #define RET return 0;
- int main() {
- const int M=10; // i tak lze definovat konstantu
- int d=5;
- for(int i=0;i<N;i++) {cout << i << " ";}
- cout << endl << endl << sqr(5) << endl; //správnê se vypí¿e 25
- cout << sqr(5+1) << endl; //¿patnê se vypí¿e 11, dûvod, makro se p⌐eloæí takto: 5+1*5+1 = 11
- cout << sqr2(5+1) << endl; //jiæ správnê vypí¿e 36, problém se vy⌐e¿il p⌐idáním závorek
- cout << sqr2(sqr2(3)) << endl; //správnê vypí¿e 81
- cout << "Stisknête 2x klávesu." << endl;
- cout << sqr2(getch()) << endl; //zde se bude vyhodnocovat dvakrát getchar() - to si také nep⌐ejeme
- d=5;
- cout << sqr2(d++) << endl; //zde selhává i druhé makro sqr2, dûvod 5*(potom se zvÿ¿í na 6)6 = 30
- d=5;
- cout << sqr2(++d) << endl; //p⌐eklad jako (++d)*(++d), zde také selhává, dûvod 6*7=42
- d=5;
- cout << sqr3(d++) << endl; //ani definováním nového makra se tento problém nevy⌐e¿í
- d=5;
- cout << sqr3(++d) << endl; //ani zde nedostaneme oçekávanÿ vÿsledek
- RET
- }
-