Microsoft KB Archive/38291

= INFO: Cannot Define Other Preprocessor Directives with #define =

Article ID: 38291

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C/C++ Professional Development System 7.0
 * Microsoft C Professional Development System 6.0a
 * Microsoft C Professional Development System 6.0a
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 5.0 Standard Edition
 * Microsoft Visual C++ 6.0 Service Pack 5

-



This article was previously published under Q38291





SUMMARY
The Microsoft C Compiler does not allow a &quot;#define&quot; statement to define another preprocessor directive. Although the preprocessor output option (/P or /E) generates the desired expansion, the Microsoft C Compiler generates the following error messages when compiling the code below:

error C2014: preprocessor command must start as first non-whitespace

error C2054: expected '(' to follow 'define'

error C2061: syntax error : identifier 'MAX'

Microsoft C/C++ for Windows NT, version 8.0, generates the following errors on the code shown below:

error C2014: preprocessor command must start as first nonwhite space

error C2065: 'MAX' : undeclared identifier

error C2057: expected constant expression

The Microsoft C/C++ compiler included with Visual C++, 32-bit edition, version 4.0, generates the following errors on the code shown below:

error C2121: '#' : invalid character : possibly the result of a macro expansion

error C2282: 'define' is followed by 'MAX' (missing ','?)

The Microsoft C/C++ compiler included with Visual C++, 32-bit edition, versions 5.0 and 6.0, generates the following errors on the code shown below:

error C2121: '#' : invalid character : possibly the result of a macro expansion

error C2146: syntax error : missing ';' before identifier 'MAX'

error C2501: 'define' : missing storage-class or type specifiers

fatal error C1004: unexpected end of file found

Sample Code
The following code demonstrates the problem: /* Compile options needed: none


 * 1) define A( x )     x##define       MAX     100

A( # ) /*   Preprocessor output expands A( # ) to be:
 * 1) define      MAX     100

char w[ MAX ]; void main(void); void main {  w[ 0 ] = w[ MAX ]; }

Additional query words: 8.00 8.00c 9.00

Keywords: kbinfo kbcompiler KB38291

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.