Chapter 11.C Preprocessor MacrosSome languages, such as C and C++, provide a way to define and invoke "preprocessor macros" whichexpand into strings of tokens. gdb can evaluate expressions containing macro invocations, show theresult of macro expansion, and show a macro’s definition, including where it was defined.You may need to compile your program specially to provide gdb with information about preproces-sor macros. Most compilers do not include macros in their debugging information, even when youcompile with the -g flag. Refer to Section 6.1 Compiling for debugging.A program may define a macro at one point, remove that definition later, and then provide a differentdefinition after that. Thus, at different points in the program, a macro may have different definitions, orhave no definition at all. If there is a current stack frame, gdb uses the macros in scope at that frame’ssource code line. Otherwise, gdb uses the macros in scope at the current listing location; (refer toSection 9.1 Printing source lines.At the moment, gdb does not support the ## token-splicing operator, the # stringification operator, orvariable-arity macros.Whenever gdb evaluates an expression, it always expands any macro invocations present in the ex-pression. gdb also provides the following commands for working with macros explicitly.macro expand expressionmacro exp expressionShow the results of expanding all preprocessor macro invocations in expression. Since gdbsimply expands macros, but does not parse the result, expression need not be a valid expres-sion; it can be any string of tokens.macro expand-once expressionmacro exp1 expression(This command is not yet implemented.) Show the results of expanding those preprocessor macroinvocations that appear explicitly in expression. Macro invocations appearing in that expan-sion are left unchanged. This command allows you to see the effect of a particular macro moreclearly, without being confused by further expansions. Since gdb simply expands macros, butdoes not parse the result, expression need not be a valid expression; it can be any string oftokens.info macro macroShow the definition of the macro named macro, and describe the source location where thatdefinition was established.macro define macro replacement-listmacro define macro(arglist) replacement-list(This command is not yet implemented.) Introduce a definition for a preprocessor macro namedmacro, invocations of which are replaced by the tokens given in replacement-list. The firstform of this command defines an "object-like" macro, which takes no arguments; the secondform defines a "function-like" macro, which takes the arguments given in arglist.A definition introduced by this command is in scope in every expression evaluated in gdb, untilit is removed with the macro undef command, described below. The definition overrides all