Article: Q67882
Product(s): Microsoft C Compiler
Version(s): 1.0,1.5,2.0,6.0,6.0a,6.0ax
Operating System(s):
Keyword(s): kbdocfix kbCompiler
Last Modified: 22-JUL-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft C/C++ Compiler (CL.EXE), included with:
- Microsoft C for MS-DOS, versions 6.0, 6.0a, 6.0ax
- Microsoft C/C++ for MS-DOS, version 7.0
- Microsoft Visual C++, versions 1.0, 1.5
- *EDITOR Please do not choose this product*Microsoft Visual C++ 32-bit Edition* use 241, 265, 225, versions 1.0, 2.0
-------------------------------------------------------------------------------
SUMMARY
=======
The following keywords were first introduced with Microsoft C version 6.0:
_based
_segment
Variables of type _segment are defined to hold a memory segment address.
With based variables, a base must be named to specify where the data resides. The
base can be of type _segment, or can be a near or a far pointer. However, if the
base is an expression, even of one of the types listed above, the following
error is produced:
error C2213: illegal argument to _based
NOTE: In Microsoft Visual C++ 32-bit Edition, version 2.0, the _segment keyword
was removed and the functionality of the __based keyword changed. In 32-bit
compilations, pointers based on pointer addresses are the only forms of __based
valid. In such compilations, these pointers are 32-bit displacements from a
32-bit base. For more information, search for "based addressing" in the online
documentation included with Visual C++ 32-bit Edition.
MORE INFORMATION
================
Microsoft has confirmed that this is a restriction, although it is not
documented as such.
The following examples illustrate the restriction:
This declaration is valid:
_segment myseg;
char _based( myseg ) *cptr;
The following declaration
struct sample
{
_segment myseg;
}rec;
char _based( rec.myseg ) *cptr;
produces the following error:
error C2213: 'rec': illegal argument to _based
error C2059: syntax error: '.'
The following declaration
_segment array[10];
char _based( array[0] ) *cptr;
produces the following error:
error C2059: syntax error: '['
Additional query words: 6.00 6.00a 6.00ax 7.00 8.00 8.00c 9.00 1.00 1.50 2.00
======================================================================
Keywords : kbdocfix kbCompiler
Technology : kbVCsearch kbAudDeveloper kbCVCComp
Version : :1.0,1.5,2.0,6.0,6.0a,6.0ax
=============================================================================