INFO: Cannot Define Other Preprocessor Directives with #define

ID: Q38291


The information in this article applies to:
  • The Microsoft C/C++ Compiler (CL.EXE)
    • Microsoft C for MS-DOS, versions 6.0, 6.0a, 6.0ax
    • Microsoft C for OS/2, versions 6.0, 6.0a
    • Microsoft C/C++ for MS-DOS, version 7.0
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5
    • Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 4.0, 5.0, 6.0


SUMMARY

The Microsoft C Compiler does not allow a "#define" 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 ','?)

Sample Code

The following code demonstrates the problem:

/* Compile options needed: none
*/ 

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

A( # )
/*
    Preprocessor output expands A( # ) to be:
#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 : kbCompiler kbVC100 kbVC150 kbVC200 kbVC400 kbVC500 kbVC600
Version : MS-DOS:6.0,6.00a,6.00ax,7.0; OS/2:6.0,6.00a; WINDOWS:1.0,1.5; WINDOWS NT:1.0,2.0,4.0,5.0
Platform : MS-DOS NT OS/2 WINDOWS
Issue type : kbinfo


Last Reviewed: July 6, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.