C++ Tutorial/Development/define

Материал из C\C++ эксперт
Перейти к: навигация, поиск

A simple assert() macro.

<source lang="cpp">#define DEBUG

  1. include <iostream>

using namespace std;

  1. ifndef DEBUG
  #define ASSERT(x)
  1. else
  #define ASSERT(x) \
           if (! (x)) \
           { \
              cout << "ERROR!! Assert " << #x << " failed\n"; \
              cout << " on line " << __LINE__  << "\n"; \
              cout << " in file " << __FILE__ << "\n";  \
           }
  1. endif

int main() {

  int x = 5;
  cout << "First assert: \n";
  ASSERT(x==5);
  cout << "\nSecond assert: \n";
  ASSERT(x != 5);
  cout << "\nDone.\n";
return 0;

}</source>

ASSERTS

<source lang="cpp">#define DEBUG

#include <iostream>

#ifndef DEBUG
    #define ASSERT(x)
#else
    #define ASSERT(x) \
        if (! (x)) \
        { \
            std::cout << "ERROR!! Assert " << #x << " failed\n"; \
            std::cout << " on line " << __LINE__  << "\n"; \
            std::cout << " in file " << __FILE__ << "\n";  \
        }
#endif

int main()
{
    int x = 5;
    std::cout << "First assert: \n";
    ASSERT(x==5);
    std::cout << "\nSecond assert: \n";
    ASSERT(x != 5);
    std::cout << "\nDone.\n";
    return 0;
}</source>
First assert:
Second assert:
ERROR!! Assert x != 5 failed
 on line 24
 in file ASSERTS.cpp
Done.

function macro of get the max value number

<source lang="cpp">#include <iostream> using namespace std;

  1. define getmax(a,b) ((a)>(b)?(a):(b))

int main() {

 int x=5, y;
 y= getmax(x,2);
 cout << y << endl;
 cout << getmax(7,x) << endl;
 return 0;

}</source>

Printing values in DEBUG mode

<source lang="cpp">#include <iostream>

#define DEBUG

#ifndef DEBUG
#define PRINT(x)
#else
#define PRINT(x) std::cout << #x << ":\t" << x << std::endl;
#endif

int main()
{
    int x = 5;
    long y = 78l;
    PRINT(x);
    
    for (int i = 0; i < x; i++)
    {
        PRINT(i);
    }

    PRINT (y);
    PRINT("Hi.");
    int *px = &x;
    PRINT(px);
    PRINT (*px);
    return 0;
}</source>
x:      5
i:      0
i:      1
i:      2
i:      3
i:      4
y:      78
Hi.":  Hi.
px:     0x22ff74
*px:    5

Using inline rather than a macro.

<source lang="cpp">#include <iostream> using namespace std; inline unsigned long Square(unsigned long a) { return a * a; } inline unsigned long Cube(unsigned long a)

   { return a * a * a; }

int main() {

  unsigned long x=1 ;
  for (;;)
  {
     cout << "Enter a number (0 to quit): ";
     cin >> x;
     if (x == 0)
        break;
     cout << "You entered: " << x;
     cout << ".  Square(" << x << "): ";
     cout  << Square(x);
     cout<< ". Cube(" << x << "): ";
     cout << Cube(x) << "." << endl;
  }
  return 0;

}</source>

Using parentheses in macros.

<source lang="cpp">#include <iostream> using namespace std;

  1. define CUBE(a) ( (a) * (a) * (a) )
  2. define THREE(a) a * a * a

int main() {

  long x = 5;
  long y = CUBE(x);
  long z = THREE(x);
  cout << "y: " << y << endl;
  cout << "z: " << z << endl;
  long a = 5, b = 7;
  y = CUBE(a+b);
  z = THREE(a+b);
  cout << "y: " << y << endl;
  cout << "z: " << z << endl;
return 0;

}</source>