Macro Substitution in C

Introduction

Ever wondered how you can simplify your C code and make it more readable? Well, the answer lies in the use of macros, specifically macro substitution. In this tutorial, we’ll delve into the world of macro substitution in C, a mechanism that provides string substitution and can be achieved through the #define directive. We’ll cover everything from the basics to more advanced topics, providing practical examples along the way. So, let’s get started!

Understanding Macro Substitution

Macro substitution is a feature of the C preprocessor that allows you to define macros, which are pieces of code that are replaced by their value before the program is compiled. This can be incredibly useful for simplifying your code and making it more readable. The syntax for defining a macro is as follows:

#define first_part second_part

In this syntax, first_part is replaced with second_part throughout the code. For example, consider the following macro:

#define square(a) a*a

In this case, every occurrence of square(b) in the program is replaced with b*b before the program is executed.

Macro Substitution in Action

Let’s take a look at a practical example of macro substitution in C. Consider the following program:

#include<stdio.h>
#define square(a) a*a

int main(){
    int b,c;
    printf("enter b element:");
    scanf("%d",&b);
    c=square(b); //replaces c=b*b before execution of program
    printf("%d",c);
    return 0;
}
C

When you run this program and enter 4 when prompted, the output will be 16. This is because the square(b) in the program is replaced with b*b before the program is executed, so c is assigned the value of b*b, which is 4*4 or 16.

Advanced Macro Substitution

Macro substitution in C can also handle more complex scenarios. For example, you can define a macro that performs a calculation involving multiple variables, like so:

#include<stdio.h>
#define equation (a*b)+c

int main(){
    int a,b,c,d;
    printf("enter a,b,c elements:");
    scanf("%d %d %d",&a,&b,&c);
    d=equation; //replaces d=(a*b)+c before execution of program
    printf("%d",d);
    return 0;
}
C

In this program, if you enter 4, 7, and 9 when prompted, the output will be 37. This is because the equation in the program is replaced with (a*b)+c before the program is executed, so d is assigned the value of (a*b)+c, which is (4*7)+9 or 37.

Code Examples

Example 1

#include<stdio.h>
#define square(a) a*a

int main(){
    int b,c;
    printf("enter b element:");
    scanf("%d",&b);
    c=square(b); //replaces c=b*b before execution of program
    printf("%d",c);
    return 0;
}
C

In this example, the macro square(a) is defined, which replaces a*a. In the main function, the user is prompted to enter a number, which is stored in b. The macro square(b) is then replaced with b*b before the program is executed, so c is assigned the value of b*b.

Example 2

#include<stdio.h>
#define equation (a*b)+c

int main(){
    int a,b,c,d;
    printf("enter a,b,c elements:");
    scanf("%d %d %d",&a,&b,&c);
    d=equation; //replaces d=(a*b)+c before execution of program
    printf("%d",d);
    return 0;
}
C

In this example, the macro equation is defined, which replaces (a*b)+c. In the main function, the user is prompted to enter three numbers, which are stored in a, b, and c respectively. The macro equation is then replaced with (a*b)+c before the program is executed, so d is assigned the value of (a*b)+c.

Wrapping Up

Macro substitution in C is a powerful tool that can simplify your code and make it more readable. By defining macros, you can replace pieces of code with their value before the program is compiled, which can be incredibly useful for simplifying complex calculations and improving the readability of your code. Whether you’re a beginner just starting out with C or an experienced programmer looking to improve your skills, understanding macro substitution is a valuable skill to have.

Frequently Asked Questions (FAQ)

  1. What is macro substitution in preprocessor?

    Macro substitution is a feature of the C preprocessor that allows you to define macros, which are pieces of code that are replaced by their value before the program is compiled.

  2. What is macro in C with example?

    A macro in C is a piece of code that is replaced by its value before the program is compiled. For example, you could define a macro square(a) that replaces a*a, so every occurrence of square(b) in the program would be replaced with b*b before the program is executed.

  3. Can C macros call other macros?

    Yes, C macros can call other macros. The called macro is expanded first, and its result is then inserted into the calling macro.

  4. What is macro #define in C?

    The #define directive in C is used to define a macro. The syntax for defining a macro is #define first_part second_part, where first_part is replaced with second_part throughout the code.

  1. Understanding Preprocessors in C
  2. Macros in C
  3. Function-like Macros in C
  4. File Inclusion in C
  5. Conditional Compilation in C
  6. Header Files in C
  7. The #undef Directive in C

Dr. Mehedi Hasan is a seasoned semiconductor professional, academic and web-designer with over a decade of experience in digital system design and verification as well as web development. Currently a Senior Engineer at AMD in Markham, Ontario, he plays a key role in the development and verification of cutting-edge chip technologies, earning multiple Spotlight Awards for his contributions.

Dr. Hasan holds a Ph.D. in Electrical and Computer Engineering from the University of Saskatchewan and has served in both academia and industry across Canada, Bangladesh, Malaysia, and Saudi Arabia. His expertise spans web-development, UVM-based SystemVerilog verification, static timing analysis (STA), RTL design, and scripting in multiple languages including Python, TCL, Shell as well as web-development tools including HTML, CSS, Javascript.

Passionate about knowledge sharing and education, Dr. Hasan has also worked as an Assistant Professor in Ontario, Canada (at Lakehead University) and Bangladesh University. He is committed to building accessible learning environments and is the founder of SkillSeminary, a platform focused on simplifying complex tech concepts for learners worldwide.

When he's not immersed in chip verification or educational projects, Dr. Hasan enjoys mentoring, researching system development, and promoting open tech education.

Scroll to Top