home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / chplus / cecko / CPP / MAKRA.CPP < prev    next >
C/C++ Source or Header  |  1998-10-05  |  1KB  |  30 lines

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