Article: Q68143
Product(s): Microsoft C Compiler
Version(s): 1.0,1.5,2.0,2.1,4.0,5.0,6.0
Operating System(s):
Keyword(s): kbLangC kbVC100 kbVC150 kbVC200 kbVC210 kbVC400 kbVC500
Last Modified: 14-NOV-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft C/C++ compiler for MS-DOS
- Microsoft Visual C++, versions 1.0, 1.5, 2.0, 2.1, 4.0
- Microsoft Visual C++, 32-bit Enterprise Edition, versions 5.0, 6.0
- Microsoft Visual C++, 32-bit Professional Edition, versions 5.0, 6.0
- Microsoft Visual C++, 32-bit Learning Edition, version 6.0
-------------------------------------------------------------------------------
SYMPTOMS
========
The Microsoft C and C/C++ compilers support the use of the stringizing
preprocessor operator only in macros that take arguments. If a # precedes a
formal parameter in the definition of a macro, the actual argument is enclosed
in double quotation marks and treated as a string when the macro is expanded.
If the argument contains characters that normally must be preceded by a backslash
(\) when appearing in a string (such as " or \), the backslash should be
automatically inserted. However, there are many cases where the preprocessor
fails to do this.
STATUS
======
This behavior is by design.
MORE INFORMATION
================
Following are some sample macros that use the stringizing operator. They are
followed by a line showing the incorrect preprocessor output (compiling with /P)
and the output that was expected.
Sample Code
-----------
Example 1:
#define print_filename(x) printf(#x);
main()
{
print_filename(d:\test\sscanf.c)
}
Preprocessor Output:
printf("d:\test\sscanf.c");
Expected Output:
printf("d:\\test\\sscanf.c");
Example 2:
#define print_filename(x) printf(#x);
main()
{
print_filename(This: \" prints an escaped double quote mark)
}
Preprocessor Output for C Compiler version 6.0:
printf("This: \\" prints an escaped double quote mark")
Preprocessor Output for C/C++ Compilers, Versions 7.0 and above:
error C2001: newline in constant
fatal error C1057: unexpected end-of-file in macro expansion
Expected Output:
printf("This: \\\" prints an escaped double quote mark")
Example 3:
#define print_stuff(x) printf(#x);
main()
{
print_stuff(I am printing a quote: ")
}
Preprocessor Output:
error C2001: newline in constant
fatal error C1057: unexpected end-of-file in macro expansion
Expected Output:
printf("I am printing a quote: \"");
Additional query words:
======================================================================
Keywords : kbLangC kbVC100 kbVC150 kbVC200 kbVC210 kbVC400 kbVC500
Technology : kbVCsearch kbVC400 kbAudDeveloper kbZNotKeyword8 kbvc150 kbvc100 kbZNotKeyword3 kbVC500 kbVC600 kbVC200 kbVC210 kbVC32bitSearch kbVC500Search
Version : :1.0,1.5,2.0,2.1,4.0,5.0,6.0
Issue type : kbprb
=============================================================================