FIX: C Run-time Include Files Missing #pragma Pack Directives (122275)
The information in this article applies to:
- The C Run-Time (CRT), when used with:
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
This article was previously published under Q122275 SYMPTOMS
The include (.H) files shipped with Visual C++ do not use the #pragma
pack preprocessor directive around declarations of structures used by
C run-time functions. You may run into problems using C run-time
functions in your program if: - You are compiling files with the /Zp compiler option and using a value
other than 8 as the argument.
-or-
- You are using #pragma pack in your source files.
CAUSE
Problems occur because most C run-time functions expect the structures
they work on to be built with the default compiler structure packing.
The structure packing they expect would be specified with one of these
compiler options: /Zp8, /Zp, or no /Zp.
RESOLUTION
If you are changing the default structure packing when building your
application, add #pragma pack directives around the #includes of the
C run-time include files to specify 8 as the packing alignment. This is
illustrated in the sample code shown in the More Information section.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This problem was fixed in Microsoft
Visual C++, version 4.0.
REFERENCES
Visual C++ Build Tools User's Guide, Chapter 2, Using the 32-Bit CL.
A description of the /Zp compiler option.
Visual C++ Preprocessor Reference, Chapter 2, Pragma Directives. A
description of #pragma pack.
Sample Code
/* Compile options needed: none
*/
#pragma pack( push, 8 )
#include <stdio.h>
#pragma pack( pop )
void main( void )
{
FILE *fp;
fp = fopen( "c:\\autoexec.bat", "r" );
}
Modification Type: | Major | Last Reviewed: | 11/18/2003 |
---|
Keywords: | kbbug kbCRT kbfix KB122275 |
---|
|