Bytes
Web Development

What are Macros in C? Types, Examples and Benefits

icon

Harshini Bhat

Data Science Consultant at almaBetter

people6 mins

people4219

Published on28 Sep, 2023

Macros in the C programming language are a powerful tool that allows developers to define reusable pieces of code, constants, and even function-like constructs. Utilizing macros can lead to more efficient and readable code by replacing repetitive or complex expressions with concise and clear identifiers. In this article, we'll delve into the concept of macros, their types, and how they are used in C programming, along with practical examples and explanations.

Introduction to Macros in C Language

Define Macros in C: Imagine you're working on a C program and frequently use a specific value or a code snippet throughout your codebase. Writing that same code repeatedly can lead to redundancy and potential errors. Macros offer a solution by allowing you to define a single identifier for that value or code, which is then replaced throughout your code with the actual value or code snippet during preprocessing.

Macros contribute to writing more robust and scalable code, as they help manage complexity and ensure consistency. In this article, we'll explore the ins and outs of macros in C programming, including different types of macros and their use cases.

What are Macros in C Language?

A macro in C is essentially a piece of code or a value that is associated with an identifier. This identifier, known as the macro name, is defined using the #define preprocessor directive. Macros provide a convenient way to substitute code snippets or values throughout your program, improving both readability and maintainability.

Macros are not pointers to memory locations; instead, they are symbolic representations that the compiler replaces with the actual value or code before the program is compiled.

Let's break down the components of a macro using the following syntax:

#define MACRO_NAME MACRO_VALUE

Here, MACRO_NAME is the name you choose for your macro, and MACRO_VALUE is the corresponding value or code snippet. It's important to note that macros do not end with a semicolon.

Let's illustrate this with an example:

#include <stdio.h>

// Define a macro for the value of pi
#define PI 3.14159

int main() {
    double radius = 5.0;
    double area = PI * radius * radius;
    
    printf("The area of the circle is: %lf\n", area);
    
    return 0;
}

In this example, the macro PI is defined with the value 3.14159. When the code is preprocessed, every occurrence of PI in the code is replaced with its corresponding value, resulting in efficient and readable code.

Preprocessor and Preprocessor Directives in C

Before a C program is compiled, it undergoes preprocessing, a stage where the preprocessor handles various directives indicated by the # symbol. Preprocessor directives provide instructions to the compiler on how to process the code before compilation. For macros, the #define directive is used to define macros, allowing you to specify a macro name and its corresponding value or code snippet. When the code is preprocessed, the macro name is replaced with its value throughout the program.

Types of Macros in C Language

1. Object-Like Macros

Object-like macros are simple substitutions of values or code snippets. They are similar to constants and are often used to improve code readability and maintainability by giving meaningful names to commonly used values.

Example:

#define MAX_VALUE 100
#define PI 3.14159

2. Function-Like Macros

Function-like macros mimic the behavior of functions. They accept arguments and can perform complex operations, offering a convenient way to create reusable code blocks.

Example:

#define SQUARE(x) ((x) * (x))
#define AREA(radius) (PI * SQUARE(radius))

3. Chain-Like Macros

Chain-like macros involve using one macro within another. When the code is preprocessed, the parent macro is expanded first, followed by the child macro.

Example:

#define PI 3.14159
#define AREA(radius) (PI * (radius) * (radius))

Function Like Macros in C

Function-like macros in C programming allow you to create macros that resemble actual function calls. They can accept arguments and perform operations on those arguments, making them more versatile than simple object-like macros. However, it's important to note that unlike functions, macros do not involve function call overhead; they are expanded directly in the code.

Let's take a closer look at function-like macros in C examples.

Example 1: Absolute Value Macro

Suppose you want to create a macro that calculates the absolute value of a given number. Here's how you can define and use it:

#include <stdio.h>

#define ABS(x) ((x) < 0 ? -(x) : (x))

int main() {
    int num = -10;
    printf("Absolute value of %d is %d\n", num, ABS(num));

    return 0;
}

In this example, the macro ABS calculates the absolute value of the given number x. It uses the ternary operator to return either the negation of x (if x is negative) or x itself (if x is non-negative).

Example 2: Maximum Macro

Let's create a macro that finds the maximum of two given numbers:

#include <stdio.h>

#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int num1 = 20, num2 = 35;
    printf("The maximum of %d and %d is %d\n", num1, num2, MAX(num1, num2));

    return 0;
}

Here, the MAX macro compares two numbers a and b and returns the larger of the two.

Macros in C Programming Examples

Example 1: Swap Macro

A common programming task is swapping the values of two variables. Let's create a macro to achieve this:

#include <stdio.h>

#define SWAP(a, b) do { \
    int temp = (a); \
    (a) = (b); \
    (b) = temp; \
} while(0)

int main() {
    int x = 5y = 10;
    printf("Before swap: x = %d, y = %d\n"xy);
    
    SWAP(xy);
    
    printf("After swap: x = %d, y = %d\n"xy);

    return 0;
}

Example 2: Area of a Rectangle

Let's create a macro to calculate the area of a rectangle given its length and width:

#include <stdio.h>

#define RECTANGLE_AREA(length, width) ((length) * (width))

int main() {
    double length = 7.5, width = 4.2;
    double area = RECTANGLE_AREA(length, width);
    
    printf("Rectangle area: %.2lf\n", area);

    return 0;
}

Predefined Macros in C Language

C language comes with a set of predefined macros that provide information about the code and the compilation process. These macros are particularly useful for debugging and providing contextual information.

__LINE__: Represents the current line number in the code.

__FILE__: Holds the name of the current source file.

__DATE__: Contains the compilation date in the format "MMM DD YYYY."

__TIME__: Holds the compilation time in the format "HH:MM."

__STDC__: Is defined as 1 if the compiler complies with the C standard.

Example:

#include <stdio.h>

int main() {
    printf("Line number: %d\n", __LINE__);
    printf("File name: %s\n", __FILE__);
    printf("Compilation date: %s\n", __DATE__);
    printf("Compilation time: %s\n", __TIME__);
    printf("STDC compliance: %d\n", __STDC__);

    return 0;
}

Conclusion

Macros in C programming provide a powerful mechanism for replacing code snippets and values throughout your program. They enhance code readability, reduce redundancy, and improve maintainability. By defining macros using the #define directive, you can create object-like macros for simple substitutions, function-like macros for complex operations, and even chain-like macros for combining multiple macros. Additionally, the predefined macros in C offer valuable information about the code and compilation process, aiding in debugging and context-aware programming. As you become proficient in using macros, you'll unlock new ways to write efficient and elegant C code.

Recommended Courses
Certification in Full Stack Web Development
Course
20,000 people are doing this course
Become a job-ready Full Stack Web Developer in 30 weeks. Join the largest tech community in India. Pay only after you get a job above 5 LPA.
Masters in Computer Science: Software Engineering
Course
20,000 people are doing this course
Join India's only Pay after placement Master's degree in Computer Science. Get an assured job of 5 LPA and above. Accredited by ECTS and globally recognised in EU, US, Canada and 60+ countries.

AlmaBetter’s curriculum is the best curriculum available online. AlmaBetter’s program is engaging, comprehensive, and student-centered. If you are honestly interested in Data Science, you cannot ask for a better platform than AlmaBetter.

avatar
Kamya Malhotra
Statistical Analyst
Fast forward your career in tech with AlmaBetter

Vikash SrivastavaCo-founder & CPTO AlmaBetter

Vikas CTO
AlmaBetter
Made with heartin Bengaluru, India
  • Official Address
  • 4th floor, 133/2, Janardhan Towers, Residency Road, Bengaluru, Karnataka, 560025
  • Communication Address
  • 4th floor, 315 Work Avenue, Siddhivinayak Tower, 152, 1st Cross Rd., 1st Block, Koramangala, Bengaluru, Karnataka, 560034
  • Follow Us
  • facebookinstagramlinkedintwitteryoutubetelegram

© 2023 AlmaBetter