In this blog post, you will learn about the stringizing operator (#
) and it uses in C programming. Also, you will see some C programming examples of stringizing operators (#
). So let’s first understand what is stringizing operator (#
) in C?
What is the “stringizing” operator (#
)?
The “stringizing” operator (#
) converts macro parameters to string literals without expanding the parameter definition. It is used only with function-like macro (macros that take arguments). Let’s first understand the syntax of function-like macro it will help you to understand the concept and use of the number-sign or “stringizing” operator (#
).
#define identifier( parameters ) replacement-list
The above declaration is a simple syntax of a function-like macro with replacement. Let’s see an example.
// Function-like Macro definition #define MAX(a, b) (((a) > (b)) ? (a) : (b))
If a parameter is immediately preceded by a #
(preprocessing token) in the replacement list of a function-like macro, the parameter is enclosed within quotation marks and treated as a literal string.
Example C program with Stringizing operator (#)
:
The following examples show a function-like macro definition that includes the stringizing operator, and the main function that invokes the macro.
Example 1:
#include <stdio.h> #define PRINT_MSG( x ) printf(#x) int main() { PRINT_MSG(LOVE TO READ ATICLEWORLD); return 0; }
Output:
LOVE TO READ ATICLEWORLD
Explanation of the code:
The PRINT_MSG
macros are expanded during preprocessing, producing the following code.
int main() { printf( "LOVE TO READ ATICLEWORLD"); return 0; }
Example 2:
#include <stdio.h> #define PRINT_MSG( x ) printf(#x) int main() { PRINT_MSG(12345); return 0; }
Output:
12345
Explanation of the code:
The PRINT_MSG
macros are expanded during preprocessing, producing the following code.
#include <stdio.h> int main() { printf("12345"); return 0; }
Example 3:
#include <stdio.h> #define PRINT_MSG( x ) printf(#x "\n") int main() { PRINT_MSG(LOVE TO READ ATICLEWORLD); PRINT_MSG(12456); return 0; }
Output:
LOVE TO READ ATICLEWORLD
12456
Explanation of the code:
The PRINT_MSG
macros are expanded during preprocessing, producing the following code.
int main() { printf("LOVE TO READ ATICLEWORLD" "\n"); printf( "123456" "\n"); return 0; }
Note:
If the replacement that results is not a valid character string literal, the behavior is undefined.
White space that precedes the first token and follows the last token of the actual argument is ignored. Any white space between the tokens in the actual argument is reduced to a single white space in the resulting string literal.
#include <stdio.h> #define PRINT_MSG(x) printf( #x ) int main() { PRINT_MSG( ab c ); return 0; }
Output:
Explanation of the code:
The PRINT_MSG
macros are expanded during preprocessing, producing the following code.
int main() { printf("ab c"); return 0; }
A \
character is inserted before each "
and \
character of a string literal (including the delimiting “characters), except that it is implementation-defined whether a \ character is inserted before the \ character beginning a universal character name.
#include <stdio.h> #define PRINT_MSG( x ) printf(#x "\n") int main() { PRINT_MSG(LOVE TO READ ATICLEWORLD); PRINT_MSG("LOVE TO READ ATICLEWORLD"); PRINT_MSG("Wow:\" LOVE TO READ ATICLEWORLD"); return 0; }
Output:
Explanation of the code:
The PRINT_MSG
macros are expanded during preprocessing, producing the following code.
int main() { printf("LOVE TO READ ATICLEWORLD" "\n"); printf("\"LOVE TO READ ATICLEWORLD\"" "\n"); printf("\"Wow:\\\" LOVE TO READ ATICLEWORLD\"" "\n"); return 0; }
Recommended Post
- Token Pasting Operator in C/C++ programming.
- Learn how to use the typedef in C.
- Macro in C, you should know.
- enum in C,7 application.
- You should know the volatile Qualifier.
- 100 embedded C Interview Questions.
- Interview questions on bitwise operators in C
- 10 questions about dynamic memory allocation.
- File handling in C.
- 100 C interview Questions.
- Pointer in C, A Brief Introduction.
- C format specifiers.