INFO: Use of the Stringizing Operator (#) in Macros (57949)
The information in this article applies to:
- Microsoft Visual C++ 1.0
- Microsoft Visual C++ 1.5
- Microsoft Visual C++ 2.0
- Microsoft Visual C++ 4.0
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q57949 SUMMARY
In Microsoft C for MS-DOS and Windows NT, when you are writing a
preprocessor macro that takes an argument that must appear in quotation
marks, you can use the # sign to expand the argument. One implementation of
this preprocessor directive is the use of printf() in the macro. The
following code demonstrates an example:
Sample Code
#define PR(fmt,value) printf("value = %" #fmt "\n", (value))
#include <stdio.h>
void main(void)
{
float afl;
afl = 3.14f;
PR(5.2f, afl);
}
The sample code outputs the following string:
value = 3.14
The # sign in front of the fmt variable allows the macro to be expanded
using quotation marks. Note that the preprocessor concatenates consecutive
pairs of double quotation marks so that the following string
"value = %""5.2f""\n"
is translated into the following:
"value = %5.2f\n"
Modification Type: | Major | Last Reviewed: | 12/11/2003 |
---|
Keywords: | kbinfo kbLangC KB57949 |
---|
|