#define in C++
In C++, #define
is a preprocessor directive used to define a macro. Macros are a way to represent a fragment of code or a constant value by giving it a name. When the preprocessor encounters the macro name in the code, it replaces it with the corresponding code fragment or value that is defined using the #define preprocessor. In this article we will learn about using #define in C++.
Syntax of #define in C++
We can define the two types of macro using #define:
- Constant Macros
- Chain Macros
- Macro Expressions
- Multiline Macros
Syntax for Defining Constant Macros
#define MACRO_NAME value
They are also called object-like macros by a number of people.
Syntax for Defining Chain Macros
#define MACRO1_NAME value1
#define value1 final_value
Syntax for Defining Expression Macros
#define MACRO_NAME (expression within brackets)
We can also define a macro expression that takes parameters:
#define MACRO_NAME(parameters) (expression)
These types of macros are also called function like macros.
Syntax for Defining Multiline Macros
The backslash (\) here works as the joiner of the two values.
#define MACRO_NAME value \
value2 \
value3 \
Examples of #define in C++
Example 1: Macro Constant
In the following example we have used #define to assign a constant value to PI so that PI can be referred later in the program to calculate the area of the circle.
// C++ Program to calculate the area of the circle with a
// predefined macro
#include <iostream>
using namespace std;
#define PI 3.1425
int main()
{
float radius = 5, area;
cout << "Enter the radius of a circle: ";
cin >> radius;
area = PI * (radius * radius);
cout << "\nArea = " << area;
cout << endl;
return 0;
}
Output
Enter the radius of a circle: Area = 78.5625
Example 2: Macro Expression
In the following example we have used #define to define a for loop expression that will print the values present in an array.
// C++ Program for to illustrate how to use function like or
// expression macros
#include <iostream>
#include <string>
using namespace std;
// defining short expression of for loop
#define forLoop(len) for (int i = 0; i < len; i++)
int main()
{
string arr[5]
= { "Geeks", "for", "Geeks", "C++", "Tutorial" };
forLoop(5) { cout << arr[i] << "\n"; }
return 0;
}
Output
Geeks for Geeks C++ Tutorial
Example 3: Chain Macros
// C++ Program to illustrate how to use chain like macros
#include <iostream>
// defining one macro that has value which in turn is
// another macro
#define ALL_USERS FB_USERS
// macro linked to upper macro
#define FB_USERS 100
using namespace std;
int main()
{
cout << "ALL_USERS: " << ALL_USERS;
return 0;
}
Output
ALL_USERS: 100
Example 4: Multiline Macros
// C++ program to illustrate how to use multiline macros
#include <iostream>
// defining a multiline string that will be joined when it
// is used in the program
#define SENTENCE "Welcome \
to \
GeeksforGeeks"
using namespace std;
int main()
{
cout << SENTENCE;
return 0;
}
Output
Welcome to GeeksforGeeks
Properties of #define Macros
The following are some important properties of macros:
- Macros are like labels and not like variable names, we cannot reassign them any value later on in the program.
- Macros' values are substituted in the program in the preprocessing phase.
- Macro defined using the #define can be undefined using #undef.
- We can also check if the macro name is defined using #ifdef and #ifndef.
Applications of #define in C++
Following are some applications of #define:
- #define is commonly used to define constants that are replaced by their values during preprocessing.
- Used to define simple macros that removes the repetitive code from the program.
- Used for conditional compilation to include or exclude certain sections of code based on specific conditions.
- Used to shorten lengthy expression present in the program.
One of the major application of Macros in C was in the generic programming but it is not required in C++ as C++ have templates for generic programming.