'Using #define for a function [duplicate]

After struggling with C++ typedef and define, I've tried myself some code and here it is:

#include <iostream>
#include <string>
#define sub(a,b) a-b
using namespace std;
int main()
{
    int n;
    cin >> n;
    cout <<  n*sub(5*2,3*3)+1;
}

I've find that if n=3, it'll give 22 and the equation is 3*5*2-3*3+1=22;

I can't imagine the mechanism of it, can someone help me please?



Solution 1:[1]

Just insert in this expression

n*sub(5*2,3*3)+1

the macro extension 5*2 - 3*3 and you will have

n * 5*2 - 3*3 + 1

You should rewrite the macro at least like

#define sub(a,b) ( (a ) - ( b ) )

And in C++ it is better to use inline functions (possibly with the specifier constexpr) instead pf such a macro.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1