home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1991-03-01 | 200.0 KB | 4,075 lines
%@1@%%@AB@%Microsoft QuickC Compiler - UPDATE%@AE@%%@EH@%%@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% %@AB@%Microsoft (R) QuickC (R) Compiler - UPDATE%@AE@%%@NL@% %@NL@% %@AB@%VERSION 2.5%@AE@%%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% %@NL@% %@NL@% MICROSOFT CORPORATION %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@%%@NL@% %@NL@% Information in this document is subject to change without notice and does not represent a commitment on the part of Microsoft Corporation. The software described in this document is furnished under a license agreement or nondisclosure agreement. The software may be used or copied only in accordance with the terms of the agreement. It is against the law to copy the software on any medium except as specifically allowed in the license or nondisclosure agreement. No part of this manual may be reproduced or trans- mitted in any form or by any means, electronic or mechanical, including photocopying and recording, for any purpose without the express written permission of Microsoft. (C) Copyright Microsoft Corporation, 1990. All rights reserved.%@NL@% %@NL@% Printed and bound in the United States of America.%@NL@% %@NL@% Microsoft, MS, MS-DOS, QuickC, and CodeView are registered trademarks of Microsoft Corporation.%@NL@% %@NL@% %@NL@% %@NL@% Document No. SY10426-0290 %@AI@% %@AE@%OEM D703-2Z %@AI@%%@AE@% 10 9 8 7 6 5 4 3 2 1 %@AI@%%@AE@%%@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@1@%%@AB@%Table of Contents%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@%%@NL@% %@NL@% %@NL@% %@AB@%Introduction%@AE@%%@BO: 1e38@%%@NL@% Enhancements for QuickC 2.5%@BO: 21e8@%%@NL@% About This Book%@BO: 264e@%%@NL@% Key to Document Conventions%@BO: 2943@%%@NL@% %@NL@% %@AB@%Chapter 1%@AE@%%@BO: 34c5@% %@AB@%User Interface Changes%@AE@%%@NL@% %@NL@% 1.1%@BO: 3727@% File Menu Changes%@NL@% 1.2%@BO: 3b68@% View Menu Changes%@NL@% 1.3%@BO: 3ff1@% Search Menu Changes%@NL@% 1.4%@BO: 4540@% Make Menu Changes%@NL@% 1.5%@BO: 4f53@% Debug Menu: New Quickwatch Command%@NL@% 1.6%@BO: 5a11@% Options Menu Changes%@NL@% 1.6.1%@BO: 5f29@% Compiler Flags Dialog-Box Changes%@NL@% 1.6.2%@BO: 641e@% Linker Flags Dialog-Box Changes%@NL@% 1.6.3%@BO: 6767@% Display Dialog-Box Changes%@NL@% 1.6.4%@BO: 6c6b@% New Color Command%@NL@% 1.7%@BO: 7461@% Help Menu Changes%@NL@% %@NL@% %@AB@%Chapter 2%@AE@%%@BO: 7737@% %@AB@%Language Differences%@AE@%%@NL@% %@NL@% 2.1%@BO: 7b90@% ANSI Compatibility%@NL@% 2.1.1%@BO: 7cd1@% ANSI-Mandated New Features%@NL@% 2.1.2%@BO: 832a@% Integer Promotion Rules%@NL@% 2.1.3%@BO: 8780@% Defining NULL as a Pointer%@NL@% 2.1.4%@BO: 88f0@% Shift Operators%@NL@% 2.1.5%@BO: 8c89@% Pointers to Type Definitions%@NL@% 2.1.6%@BO: 91a0@% Identifying Nonstandard Keywords%@NL@% 2.1.7%@BO: 95f8@% Trigraphs%@NL@% 2.1.8%@BO: 9950@% ANSI Nonconformance%@NL@% 2.2%@BO: 9c1c@% New Language Keywords%@NL@% 2.2.1%@BO: 9d45@% In-Line Assembler%@NL@% 2.2.2%@BO: 9ea9@% Based Pointers and Objects%@NL@% 2.2.3%@BO: a125@% Long Double Types%@NL@% 2.2.4%@BO: a4fd@% The _fastcall Function Attribute (/Gr Option)%@NL@% 2.3%@BO: b1d0@% New Language Features%@NL@% 2.3.1%@BO: b2ca@% Strings and Macros%@NL@% 2.3.2%@BO: b426@% Tiny Memory Model (.COM Files)%@NL@% 2.3.3%@BO: b727@% Custom Memory Models%@NL@% 2.3.4%@BO: c3a9@% Omitting Names of Nested Structures and Unions%@NL@% 2.3.5%@BO: cb61@% Unsized Arrays as the Last Member of a Structure%@NL@% 2.3.6%@BO: cee4@% Improved Warnings%@NL@% 2.3.7%@BO: d1e0@% Macros%@NL@% 2.4%@BO: d2b7@% Changes and Deletions%@NL@% 2.4.1%@BO: d3ab@% Deleted Features%@NL@% 2.4.2%@BO: d4b8@% Conditional Compilation and Signed Values%@NL@% 2.4.3%@BO: d72e@% The const and volatile Qualifiers%@NL@% 2.4.4%@BO: da66@% Memory Allocation%@NL@% 2.4.5%@BO: dc28@% Memory Used by Command-Line Arguments%@NL@% 2.4.6%@BO: ddc9@% Format Specifiers in printf and scanf%@NL@% 2.4.7%@BO: e275@% Functions that Return Float Values%@NL@% 2.4.8%@BO: e49c@% The char Variable Alignment%@NL@% %@NL@% %@AB@%Chapter 3%@AE@%%@BO: e5f4@% %@AB@%Compiler, Linker, and Utility Changes%@AE@%%@NL@% %@NL@% 3.1%@BO: e952@% Compiler Options%@NL@% 3.2%@BO: f7f2@% Linker Options%@NL@% 3.3%@BO: fe3f@% LIB Options%@NL@% 3.4%@BO: ffc4@% NMAKE Options%@NL@% %@NL@% %@AB@%Chapter 4%@AE@%%@BO: 10256@% %@AB@%Library Changes%@AE@%%@NL@% %@NL@% 4.1%@BO: 10432@% Buffer-Manipulation Routines%@NL@% 4.2%@BO: 10dbb@% Data-Conversion Routines%@NL@% 4.3%@BO: 10f42@% Directory-Control Routines%@NL@% 4.4%@BO: 11188@% File-Handling Routines%@NL@% 4.5%@BO: 11331@% Graphics Routines%@NL@% 4.6%@BO: 11959@% Stream Input and Output Routines%@NL@% 4.7%@BO: 11ad5@% Internationalization Routines%@NL@% 4.8%@BO: 11ec8@% Math Routines%@NL@% 4.9%@BO: 12918@% Memory-Allocation Routines%@NL@% 4.10%@BO: 130ab@% Process- and Environment-Control Routines%@NL@% 4.11%@BO: 13457@% String-Manipulation Routines%@NL@% %@NL@% %@AB@%Chapter 5%@AE@%%@BO: 14174@% %@AB@%Error-Message Reference%@AE@%%@NL@% %@NL@% 5.1%@BO: 14304@% Compiler Errors%@NL@% 5.1.1%@BO: 144cc@% Fatal-Error Messages%@NL@% 5.1.2%@BO: 17897@% Compilation-Error Messages%@NL@% 5.1.3%@BO: 1d5eb@% Warning Messages%@NL@% 5.2%@BO: 276ff@% Command-Line Error Messages%@NL@% 5.3%@BO: 28504@% Run-Time Error Message%@NL@% 5.4%@BO: 288a7@% QLINK Error Messages%@NL@% 5.4.1%@BO: 28e72@% Fatal-Error Messages%@NL@% 5.4.2%@BO: 2a2b9@% Nonfatal-Error Messages%@NL@% 5.4.3%@BO: 2bac8@% Warning Messages%@NL@% 5.5%@BO: 2dc1c@% NMAKE Error Messages%@NL@% 5.5.1%@BO: 2de14@% Fatal-Error Messages%@NL@% 5.5.2%@BO: 30b30@% Compilation-Error Message%@NL@% 5.5.3%@BO: 30f76@% Warning Messages%@NL@% %@NL@% %@NL@% %@CR:C6A-Intro @%%@1@%%@AB@%Introduction%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% The Microsoft(R) QuickC(R) Compiler version 2.5 offers a variety of new features that support the latest advances in C language technology. The main enhancements in this version include language compatibility with Microsoft C version 6.0, increased ANSI compatibility, and improvements to the user interface. %@NL@% %@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% NOTE %@AI@%The term "DOS" refers to both the MS-DOS%@AI@%(R)%@AE@%%@AI@% and IBM Personal Computer DOS %@AI@%operating systems. The name of a specific operating system is used when it %@AI@%is necessary to note features that are unique to that system.%@AE@%%@AE@%%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@%%@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00000001 @%%@AB@%Enhancements for QuickC 2.5%@AE@%%@EH@%%@NL@% %@NL@% Here's a quick summary of the enhancements for QuickC version 2.5. The following chapters describe these features in more detail. %@NL@% %@NL@% %@NL@% ■ Language compatibility with Microsoft C version 6.0%@NL@% %@NL@% ■ Increased ANSI standard C compatibility %@NL@% %@NL@% ■ Support for the tiny memory model%@NL@% %@NL@% ■ Enhanced graphics library%@NL@% %@NL@% ■ New Quickwatch debugging feature%@NL@% %@NL@% ■ Customized color window support %@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% NOTE %@AI@%Due to the size of the expanded run-time libraries, QuickC 2.5 must be used %@AI@%with a hard disk.%@AE@%%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@%%@NL@% %@NL@% %@NL@% %@NL@% %@NL@% The QuickC Advisor has also been updated to provide information on all QuickC language, user interface, and compiler features. Consult the Advisor for detailed information on any of the features mentioned in this book. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00000002 @%%@AB@%About This Book%@AE@%%@EH@%%@NL@% %@NL@% This book is divided into five chapters: %@NL@% %@NL@% %@NL@% ■ Chapter 1, "User Interface Changes," discusses the changes in menus, menu commands, dialog boxes, and error messages.%@NL@% %@NL@% ■ Chapter 2, "Language Differences," describes the differences between QuickC 2.5 and QuickC 2.0.%@NL@% %@NL@% ■ Chapter 3, "Compiler, Linker, and Utility Changes," lists the new utility and QCL compile and link options.%@NL@% %@NL@% ■ Chapter 4, "Library Changes," lists the new library routines and summarizes their use.%@NL@% %@NL@% ■ Chapter 5, "Error-Message Reference," lists the new QuickC error messages.%@NL@% %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00000003 @%%@AB@%Key to Document Conventions%@AE@%%@EH@%%@NL@% %@NL@% This book uses the following document conventions: %@NL@% %@NL@% %@AB@%Example%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% COPY TEST.OBJ C: Uppercase letters represent DOS commands and file names. %@AB@%printf%@AE@% Boldface letters indicate standard features of the C language: keywords, operators, and standard library functions. %@AI@%expression%@AE@% Words in italics indicate placeholders for information you must supply, such as a file name. Italics are also occasionally used for emphasis in the text. %@AS@%main()%@AE@% This typeface is used for example %@AS@%{%@AE@% programs, program fragments, and the %@AS@%}%@AE@% names of user-defined functions and variables. It also indicates user input and screen output. %@AS@% %@AE@% %@AB@%CL%@AE@% %@AI@%options%@AE@% «%@AI@%files...%@AE@%» A horizontal ellipsis following an item indicates that more items having the same form may follow. %@AS@%while( )%@AE@%%@AS@%%@AE@% A vertical ellipsis tells you that part %@AS@%{%@AE@% of the example program has been %@AS@% .%@AE@% intentionally omitted. %@AS@% .%@AE@% %@AS@% .%@AE@% %@AS@%}%@AE@% SHIFT Small capital letters denote names of keys on the keyboard. A plus sign ( + ) indicates a combination of keys. For example, SHIFT+F5 tells you to hold down the SHIFT key while pressing the F5 key. "array pointer" The first time a new term is defined, it is enclosed in quotation marks. Since some knowledge of programming is assumed, common terms such as memory or branch are not defined. American National Standards The first time an acronym appears, it is Institute (ANSI) spelled out. %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@CR:C6A00010001 @%%@1@%%@AB@%Chapter 1 User Interface Changes%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% The changes in version 2.5 of the QuickC Compiler environment implement new features, such as the Quickwatch command, as well as improvements to existing features. This chapter describes the changes; they are grouped according to the menu in which they appear. %@NL@% %@NL@% Remember, you can use online help to get information about all environment features, including those described in this section. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00010002 @%%@AB@%1.1 File Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following changes are found in the File menu:%@CR:C6A00010003 @%%@CR:C6A00010004 @%%@CR:C6A00010005 @% %@NL@% %@NL@% %@AB@%Change%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% Read-only file warning If you select a read-only file with the Open command in the File menu, a dialog box informs you the file is read-only. Closing notepad files In QuickC 2.5, closing the Notepad window saves and frees the file. In QuickC 2.0, when you load a file in the Notepad window and then close it, the file is not freed. The file therefore cannot be loaded into the Program window.%@CR:C6A00010006 @% %@NL@% %@2@%%@CR:C6A00010007 @%%@AB@%1.2 View Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following change is found in the View menu:%@CR:C6A00010008 @%%@CR:C6A00010009 @%%@CR:C6A00010010 @% %@NL@% %@NL@% %@AB@%Change%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% Registers window The Registers window displayed with the Windows command in the View menu has been modified to display information about the math coprocessor chip and emulator. Additionally, pressing TAB moves the cursor forward between modifiable fields, while pressing SHIFT+TAB moves the cursor backward between modifiable fields. Pressing ENTER or double-clicking the Left mouse button allows you to modify a register. %@NL@% %@2@%%@CR:C6A00010011 @%%@AB@%1.3 Search Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following changes are found in the Search menu:%@CR:C6A00010012 @%%@CR:C6A00010013 @%%@CR:C6A00010014 @% %@NL@% %@NL@% %@AB@%Change%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% New Go to command The Go to... command has been added to the Search menu. This command displays a dialog box into which you type a desired line number. Then QuickC moves the cursor to that line.%@CR:C6A00010015 @% Selected text shortcut key Since the backslash key ( \ ) is not available on standard European keyboards, the shortcut key for the Selected Text command has been changed from CTRL+\ to CTRL+F3. CTRL+\ is now the shortcut key for the Find command in the Search menu. The effect of CTRL+\ can be modified with the MKKEY utility. %@NL@% %@2@%%@CR:C6A00010016 @%%@AB@%1.4 Make Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following changes are found in the Make menu:%@CR:C6A00010017 @%%@CR:C6A00010018 @%%@CR:C6A00010019 @% %@NL@% %@NL@% %@AB@%Change%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% Canceling the build process With version 2.5, pressing ESC cancels a compile, but not a link. The dialog box tells you to press CTRL+BREAK to cancel both compiling and linking. Previously, when either the Build or the Rebuild All command was given, the dialog box said to press ESC to cancel compiling and linking.%@CR:C6A00010020 @% .H files in the program list QuickC 2.5 supports adding .H files to the program list with the Edit Program List command. QuickC treats all .C files as dependents of the .H files in the list. If an include file is modified, QuickC performs a full rebuild. If you have hand-edited a makefile to encode .H file dependencies, then QuickC does not display these include files as part of the program list in the Edit Program List dialog box. If QuickC rewrites the hand-edited makefile, these include-file dependencies are not modified.%@CR:C6A00010021 @% %@CR:C6A00010022 @% Alphabetical file File names are now displayed display in the alphabetically in the program list and program list in the dialog box displayed by choosing the Source command in the View menu. Consequently, names of .LIB files are displayed at the end of the list, eliminating the need to scroll over names of files that cannot be opened with the Source command. %@NL@% %@2@%%@CR:C6A00010023 @%%@AB@%1.5 Debug Menu: New Quickwatch Command%@AE@%%@EH@%%@NL@% %@NL@% The Quickwatch command is a new feature in QuickC 2.5. It gives you a faster view of variables and expressions than does the Watch Value command. To use Quickwatch%@CR:C6A00010024 @%%@CR:C6A00010025 @%%@CR:C6A00010026 @%%@CR:C6A00010027 @%%@CR:C6A00010028 @% %@NL@% %@NL@% %@NL@% 1. Move the cursor to the variable you want to watch, or highlight the expression you want to watch.%@NL@% %@NL@% 2. Choose the Quickwatch command from the Debug menu or press SHIFT+F9%@NL@% %@NL@% %@NL@% QuickC displays a dialog box with the selected variable or expression along with the current value. See Figure 1.1. %@NL@% %@NL@% %@AU@%(This figure may be found in the printed book.)%@AE@%%@NL@% %@NL@% Instead of placing the cursor on the variable or highlighting the expression you want to watch, you can select Quickwatch, or press SHIFT+F9, and type an expression in the text box of the dialog box. %@NL@% %@NL@% The lower part of the Quickwatch dialog box contains the following buttons: %@NL@% %@NL@% Zoom Modify Value Evaluate Cancel Add Watch Help %@NL@% %@NL@% The Zoom button expands or contracts an array or structure. Zoom displays the values of the array members or structure elements in the List box. To show levels of expansion in the List box, nested elements are indented one space. If the expression has already been expanded, the Zoom button contracts the items. If a variable can be expanded, it has a "+" prefix. If a variable can be contracted, it has a "-" prefix. If the expression cannot be expanded or contracted and Zoom is selected, QuickC beeps. %@NL@% %@NL@% The Evaluate button uses the current expression in the Expression text box as the new base variable. If the expression can be expanded, the Zoom button displays items in the List box. %@NL@% %@NL@% To further expand nested items shown in the List box, select item names with the mouse or cursor. The item names are copied to the Expression text box, and the appropriate values are displayed in the Value text box and the List box. Then you can use the Zoom button to expand or contract the nested items. %@NL@% %@NL@% The Add Watch button adds the current expression to the Watch window. If the expression is already included in the Watch window, Add Watch has no effect. %@NL@% %@NL@% The Modify Value button changes the value of the expression to the value entered in the Value text box. When you select Modify Value, QuickC records and displays the updated value in the List box. %@NL@% %@NL@% The Cancel button closes the Quickwatch dialog box. %@NL@% %@NL@% The Help button displays information about using the Quickwatch dialog box. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00010029 @%%@AB@%1.6 Options Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following changes are found in the Options menu:%@CR:C6A00010030 @%%@CR:C6A00010031 @%%@CR:C6A00010032 @% %@NL@% %@NL@% %@AB@%Change%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% Run/Debug command-line length In QuickC 2.5, the Command Line text box limitation in the Run/Debug dialog box accepts up to 126 characters. A warning message is displayed if the length of text exceeds 126 characters. QuickC 2.0 accepts up to 256 characters. However, only the first 126 characters are used. Compiler flags, linker flags, Numerous changes have been made to the and display dialog box changes compiler flags, linker flags, and display dialog boxes. They are described in the following sections. New color command Enhanced options for setting colors in QuickC are described below. %@NL@% %@3@%%@CR:C6A00010033 @%%@AB@%1.6.1 Compiler Flags Dialog-Box Changes%@AE@%%@EH@%%@NL@% %@NL@% The Compiler Flags dialog box, shown in Figure 1.2, contains the following modifications: %@NL@% %@NL@% %@NL@% ■ The Compiler Flags dialog box, displayed by selecting the Compiler Flags button in the Make dialog box, has been modified to support the tiny memory model.%@NL@% %@NL@% ■ The Warning Level option has been changed from a set of option buttons to a text box, and this option now supports warning levels up to 4. If you enter an invalid warning level, QuickC displays a warning message.%@NL@% %@NL@% ■ In QuickC version 2.5, the Full CodeView check box replaces the Line Numbers Only option under Debug Flags in version 2.0. If Full CodeView is checked, QuickC generates complete information on the Microsoft CodeView(R) debugger. If the option is left unchecked, QuickC generates line number information.%@NL@% %@NL@% ■ Three Custom Flags text boxes have been added to the dialog box. They allow you to specify additional Global, Debug, and Release compiler directives. %@NL@% %@NL@% %@STUB@% %@AU@%(This figure may be found in the printed book.)%@AE@%%@NL@% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00010034 @%%@AB@%1.6.2 Linker Flags Dialog-Box Changes%@AE@%%@EH@%%@NL@% %@NL@% The Linker Flags dialog box, shown in Figure 1.3, contains the following changes:%@CR:C6A00010035 @% %@NL@% %@NL@% %@NL@% ■ The Global Flags check boxes contain a new option called Generate .COM File. This option uses the tiny memory model to create .COM files.%@NL@% %@NL@% ■ A new Memory Needs text box allows you to specify the amount of memory to allocate for a program.%@NL@% %@NL@% ■ The new Custom Flags text box allows you to specify additional Global linker directives, as well as those for Debug and Release versions of the program. Enter linker directives in the appropriate text box.%@NL@% %@NL@% %@STUB@% %@AU@%(This figure may be found in the printed book.)%@AE@%%@NL@% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00010036 @%%@AB@%1.6.3 Display Dialog-Box Changes%@AE@%%@EH@%%@NL@% %@NL@% The Display dialog box, shown in Figure 1.4, has been changed as follows: %@NL@% %@NL@% %@NL@% ■ The Save Before Build check box controls whether files are saved before building.%@NL@% %@NL@% ■ The Keep Tabs option controls tab settings. If the option is off, tabs are converted to the appropriate number of spaces. Then when the file is saved, leading spaces are converted back to tabs. If the option is on, tabs are always treated as tabs and are never converted to spaces. The default for this option is off, which is equivalent to the QuickC 2.0 method of handling tabs.%@CR:C6A00010037 @%%@CR:C6A00010038 @%%@NL@% %@NL@% ■ The Show 8087 check box controls whether the 8087 registers are displayed in the Registers window.%@NL@% %@NL@% ■ When you check the Save Before Build check box, QuickC saves any changes in open files before it builds the program.%@NL@% %@NL@% %@NL@% %@AU@%(This figure may be found in the printed book.)%@AE@%%@NL@% %@NL@% The Display dialog box no longer contains a color selection option. Expanded color options are now available through the Color command in the Options menu. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00010039 @%%@AB@%1.6.4 New Color Command%@AE@%%@EH@%%@NL@% %@NL@% The Color command in the Options menu gives you greater control over the appearance of QuickC. Items such as menus, borders, buttons, and text within windows (such as source, errors, and registers) can all be given unique colors (see Figure 1.5). %@NL@% %@NL@% %@AU@%(This figure may be found in the printed book.)%@AE@%%@NL@% %@NL@% Four predefined color sets are available. All four color sets can be modified. %@NL@% %@NL@% %@AB@%Color Set%@AE@% %@AB@%Description%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% 1 Defines the color set for 16-color display monitors 2 Defines the color set for 8-color displays 3 Specifies the color set for monochrome displays LCD Defines the color set for Liquid Crystal Displays You can customize the color of a window item by selecting that item from the Item list box, then changing the values in the Foreground and Background list boxes. Changing an item's color modifies it only within the selected color set. %@NL@% %@NL@% The Redraw button redraws the screen with the new color values. Color changes take place when the OK button is pressed. %@NL@% %@NL@% The Default button restores the normal color values. The default colors for each set are shown in the following list: %@NL@% %@NL@% %@AB@%Color Set%@AE@% %@AB@%Default%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% 1 QuickC 2.0 #1 2 QuickBasic 4.5 8-color 3 QuickC 2.0 #3 LCD QuickC 2.0 LCD %@NL@% %@2@%%@CR:C6A00010040 @%%@AB@%1.7 Help Menu Changes%@AE@%%@EH@%%@NL@% %@NL@% The following changes are found in the Help menu:%@CR:C6A00010041 @%%@CR:C6A00010042 @%%@CR:C6A00010043 @% %@NL@% %@NL@% %@NL@% ■ In QuickC 2.5, if a low memory condition exists when you try to access online help, a dialog box appears and asks if you want to close the current program first, thus freeing enough memory to run help.%@NL@% %@NL@% ■ In QuickC 2.0, if there isn't enough memory to access online help, QuickC displays an %@AS@% Out of Memory %@AE@% error. At this point, the only way to get help information is to exit QuickC and start over again.%@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@CR:C6A00020001 @%%@1@%%@AB@%Chapter 2 Language Differences%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% This chapter describes the language differences between versions 2.5 and 2.0 of the QuickC Compiler. Some of the changes are required by the American National Standards Institute (ANSI) standard for the C programming language. Other changes improve or augment the existing capabilities of QuickC and make it compatible with Microsoft C version 6.0.%@CR:C6A00020002 @% %@NL@% %@NL@% The chapter is divided into four sections: %@NL@% %@NL@% %@NL@% ■ ANSI Compatibility%@NL@% %@NL@% ■ New Language Keywords%@NL@% %@NL@% ■ New Language Features%@NL@% %@NL@% ■ Changes and Deletions%@NL@% %@NL@% %@NL@% Many of the changes described in this chapter do not affect code written for previous versions of QuickC. In some cases, however, you may have to modify existing code before compiling with version 2.5. Refer to section 2.4, "Changes and Deletions," for revisions that may impact your program. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00020003 @%%@AB@%2.1 ANSI Compatibility%@AE@%%@EH@%%@NL@% %@NL@% A number of changes have been made to the compiler to support the ANSI stan-dard. These include additions that make QuickC programs more portable and allow you to take advantage of more ANSI features.%@CR:C6A00020004 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020005 @%%@AB@%2.1.1 ANSI-Mandated New Features%@AE@%%@EH@%%@NL@% %@NL@% The following ANSI-mandated features are new to QuickC 2.5: %@NL@% %@NL@% %@NL@% ■ Both %@AB@%long %@AE@%and %@AB@%unsigned long%@AE@% values are allowed in switch expressions and case constants. Previous versions of QuickC allow only %@AB@%char%@AE@% and %@AB@%int%@AE@% values in this context.%@CR:C6A00020006 @%%@NL@% %@NL@% ■ QuickC supports %@AB@%unsigned long%@AE@% decimal constants. It is now possible to initialize %@AB@%unsigned long%@AE@% variables with values larger than %@AB@%MAX_LONG%@AE@% using decimal (rather than hexadecimal or octal) constants.%@CR:C6A00020007 @%%@NL@% %@NL@% ■ You can declare %@AB@%signed%@AE@% as well as %@AB@%unsigned%@AE@% bitfields. %@CR:C6A00020008 @%%@CR:C6A00020009 @%%@NL@% %@NL@% ■ Bitfields are permitted in unions.%@CR:C6A00020010 @%%@NL@% %@NL@% ■ Storage classes or types (or both) are now required on variable declarations. QuickC previously assumed that declarations without a specific type were integer declarations. An untyped declaration now generates a warning.%@CR:C6A00020011 @%%@NL@% %@NL@% ■ The LOCALE.H header file is new to version 2.5. It declares functions and structures for describing conventions, such as the currency symbol, that vary from one country to another.%@CR:C6A00020012 @%%@NL@% %@NL@% ■ The semantics for %@AB@%volatile%@AE@% have been implemented. Previously, %@AB@%volatile%@AE@% was only syntactically implemented.%@CR:C6A00020013 @%%@NL@% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020014 @%%@AB@%2.1.2 Integer Promotion Rules%@AE@%%@EH@%%@NL@% %@NL@% The ANSI standard changes the method of evaluation of some expressions that mix signed and unsigned integers. Earlier versions of QuickC attempt to preserve an expression's unsigned nature as much as possible. Version 2.5 attempts to preserve the expression's value.%@CR:C6A00020015 @%%@CR:C6A00020016 @% %@NL@% %@NL@% In version 2.5, an %@AB@%unsigned char%@AE@% promotes to a %@AB@%signed int%@AE@%; an %@AB@%unsigned int%@AE@% promotes to a %@AB@%signed long%@AE@%. %@NL@% %@NL@% In version 2.0, an %@AB@%unsigned char%@AE@% promotes to an %@AB@%unsigned int%@AE@%; an %@AB@%unsigned %@AB@%int%@AE@% promotes to an %@AB@%unsigned long%@AE@%. %@NL@% %@NL@% For example: %@NL@% %@NL@% %@AS@% main() %@AS@% { %@AS@% long int li = -256L; %@AS@% test( li ); %@AS@% }%@AE@%%@NL@% %@NL@% %@AS@% test( long li ) %@AS@% { %@AS@% if( li < 0xffff ) %@AS@% puts( "QuickC 2.5 does a signed comparison" ); %@AS@% else puts( "QuickC 2.0 does an unsigned comparison" ); %@AS@% }%@AE@%%@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020017 @%%@AB@%2.1.3 Defining NULL as a Pointer%@AE@%%@EH@%%@NL@% %@NL@% The constant %@AB@%NULL %@AE@%is now defined as %@AS@% ((void *)0)%@AE@%. Previous versions of QuickC define %@AB@%NULL%@AE@% as 0x0000 in the small and medium models and as 0x00000000L in the compact and large models.%@CR:C6A00020018 @%%@CR:C6A00020019 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020020 @%%@AB@%2.1.4 Shift Operators%@AE@%%@EH@%%@NL@% %@NL@% Shift operators now give a result that is of the same type as the left operand. For example, consider the code fragment%@CR:C6A00020021 @%%@CR:C6A00020022 @% %@NL@% %@NL@% %@AS@% short short_int; %@AS@% long long_int; %@AS@% short_int = 0x0001; %@AS@% long_int = short_int << 16L;%@AE@%%@NL@% %@NL@% To adhere to the ANSI standard, QuickC 2.5 maintains the size of the left operand. The variable %@AS@% short_int %@AE@% has 16 bits. Shifting left 16 times produces a value of 0, which is then assigned to %@AS@% long_int%@AE@%. %@NL@% %@NL@% QuickC previously yielded a result that was the size of the "widest" (or largest) of the two values. In the example above, the short value is automatically cast to a long because 16L is long. The value assigned to %@AS@% %@AS@%long_int %@AE@% is 0x00010000L in QuickC 2.0. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020023 @%%@AB@%2.1.5 Pointers to Type Definitions%@AE@%%@EH@%%@NL@% %@NL@% The rules for handling pointers to type definitions have changed subtly. For example, QuickC 2.5 interprets%@CR:C6A00020024 @%%@CR:C6A00020025 @% %@NL@% %@NL@% %@AS@% typedef int far f_int; %@AS@% f_int *fp_i;%@AE@%%@NL@% %@NL@% as being equivalent to %@NL@% %@NL@% %@AS@% int far *fp_i;%@AE@%%@NL@% %@NL@% which means %@AS@% fp_i %@AE@% is a near variable that is a far pointer to an integer. The address of the integer contains 32 bits. The size of the address of %@AS@% %@AS@%fp_i %@AE@% is memory model dependent. %@AS@% %@AE@%%@NL@% %@NL@% QuickC 2.0 interprets the declaration as %@NL@% %@NL@% %@AS@% int *far fp_i;%@AE@%%@NL@% %@NL@% where %@AS@% fp_i %@AE@% is a far variable that is a near pointer to an integer. The address of %@AS@% fp_i %@AE@% is 32 bits. The size of the integer's address is indeterminate. %@NL@% %@NL@% This change in handling pointers to type definitions affects type definitions containing %@AB@%_near%@AE@%, %@AB@%_far%@AE@%, %@AB@%_based%@AE@%, and other modifiers. Although these are Microsoft-specific keywords, their new behavior is consistent with the ANSI standard's requirements for the %@AB@%const %@AE@%and %@AB@%volatile %@AE@%keywords. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020026 @%%@AB@%2.1.6 Identifying Nonstandard Keywords%@AE@%%@EH@%%@NL@% %@NL@% The following modifiers are specific to QuickC; they are not part of the ANSI standard. To identify these implementation-defined keywords as non-ANSI, an initial underscore has been added.%@CR:C6A00020027 @%%@CR:C6A00020028 @% %@NL@% %@NL@% %@AB@%QuickC 2.5 Keyword%@AE@% %@AB@%QuickC 2.0 Keyword%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_far%@AE@% %@AB@%far%@AE@% %@AB@%_huge%@AE@% %@AB@%huge%@AE@% %@AB@%_near%@AE@% %@AB@%near%@AE@% %@AB@%_cdecl%@AE@% %@AB@%cdecl%@AE@% %@AB@%_fortran%@AE@% %@AB@%fortran%@AE@% %@AB@%_interrupt%@AE@% %@AB@%interrupt%@AE@% %@AB@%_pascal%@AE@% %@AB@%pascal%@AE@% The compiler still accepts the obsolescent versions of these keywords, unless you use the /Za (disable extensions) option. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020029 @%%@AB@%2.1.7 Trigraphs%@AE@%%@EH@%%@NL@% %@NL@% To maintain ANSI compatibility with and portability to other systems, QuickC supports the trigraphs listed below. The compiler interprets each sequence in the left column as equivalent to the character shown in the right column.%@CR:C6A00020030 @%%@CR:C6A00020031 @% %@NL@% %@NL@% %@AB@%Trigraph%@AE@% %@AB@%Character%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% ??= # ??( [ ??/ \ ??) ] ??' ^ ??< { ??! | ??> } ??- ~ %@NL@% %@3@%%@CR:C6A00020032 @%%@AB@%2.1.8 ANSI Nonconformance%@AE@%%@EH@%%@NL@% %@NL@% Areas in which QuickC version 2.5 does not follow the ANSI standard include the following:%@CR:C6A00020033 @% %@NL@% %@NL@% %@NL@% ■ QuickC does not support multibyte characters, wide-character constants and string constants comprising wide characters, and the related library functions and types.%@NL@% %@NL@% ■ QuickC contains some extended keywords (such as %@AB@%_near%@AE@% and %@AB@%_far%@AE@%), non-ANSI macros and types in header files, and extended library function names (such as %@AB@%read %@AE@%and %@AB@%write%@AE@%) that exceed ANSI name-space maximums.%@NL@% %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00020034 @%%@AB@%2.2 New Language Keywords%@AE@%%@EH@%%@NL@% %@NL@% This section describes keywords that do not exist in previous versions of QuickC. Details about the use of these keywords can be found in the online help.%@CR:C6A00020035 @%%@CR:C6A00020036 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020037 @%%@AB@%2.2.1 In-Line Assembler%@AE@%%@EH@%%@NL@% %@NL@% A new pseudoinstruction, %@AB@%_emit%@AE@%, has been added for use with the in-line assembler. This pseudoinstruction allows you to define a single immediate byte at the current location in the current text segment.%@CR:C6A00020038 @%%@CR:C6A00020039 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020040 @%%@AB@%2.2.2 Based Pointers and Objects%@AE@%%@EH@%%@NL@% %@NL@% QuickC 2.5 supports the following new keywords and operators: %@AB@%_based%@AE@%, %@AB@%_segment%@AE@%, %@AB@%_segname%@AE@%, and %@AB@%:>%@AE@%. They are used to declare and manipulate based objects.%@CR:C6A00020041 @%%@CR:C6A00020042 @%%@CR:C6A00020043 @%%@CR:C6A00020044 @% %@NL@% %@NL@% Based object support is included in QuickC 2.5 for the sake of compatibility with Microsoft C version 6.0. Refer to Chapter 2, "Managing Memory," in %@AI@% %@AI@%Microsoft C Advanced Programming Techniques%@AE@% for further details. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020045 @%%@AB@%2.2.3 Long Double Types%@AE@%%@EH@%%@NL@% %@NL@% Because the 80%@AI@%x%@AE@%87 family of math coprocessors supports an 80-bit floating-point type, QuickC version 2.5 stores %@AB@%long double%@AE@% variables in the 80%@AI@%x%@AE@%87 10-byte (80-bit) form. %@NL@% %@NL@% QuickC version 2.0 recognizes %@AB@%long double%@AE@% and %@AB@%double%@AE@% as different types, with both types stored in memory as 64-bit quantities.%@CR:C6A00020046 @% %@NL@% %@NL@% Certain library functions have been modified to handle the %@AB@%long double%@AE@% type. The %@AB@%printf%@AE@% and %@AB@%scanf%@AE@% family of functions supports %@AB@%long double%@AE@% values; their format has the %@AB@%l%@AE@% type prefix. The library contains new versions of the transcendental functions as well as intrinsic forms that accept %@AB@%long double%@AE@% arguments. The names of these functions have a trailing %@AB@%l%@AE@% (for example, %@AB@%cosl%@AE@%). %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020047 @%%@AB@%2.2.4 The _fastcall Function Attribute (/Gr Option)%@AE@%%@EH@%%@NL@% %@NL@% The new %@AB@%_fastcall%@AE@% function attribute enables QuickC to pass function arguments in processor registers instead of on the stack. This ability results in faster function calls when a QuickC program is built with Microsoft C version 6.0.%@CR:C6A00020048 @% %@NL@% %@NL@% You can define fastcall functions in two ways. Use the %@AB@%_fastcall%@AE@% function attribute to declare an individual function as fastcall: %@NL@% %@NL@% %@AS@% int _fastcall FastFunc( void );%@AE@%%@NL@% %@NL@% Additionally, the /Gr option enables the fastcall function-calling convention for all functions that are not explicitly prototyped with the %@AB@%_cdecl%@AE@%, %@AB@%_pascal%@AE@%, or %@AB@%_fortran %@AE@%attributes. Using /Gr on the command line causes each function in the module to compile as %@AB@%_fastcall%@AE@% unless the function is declared with a conflicting attribute, or the name of the function is %@AB@%main%@AE@%. %@NL@% %@NL@% None of the library functions have the fastcall attribute; their arguments are passed on the stack, not in registers. If you compile with the /Gr option, you must include the correct header file for each library function or write a prototype for the function using the %@AB@%_cdecl%@AE@% attribute. %@NL@% %@NL@% A fastcall function can receive up to three 16-bit arguments. Arguments are passed in the AX, BX, and DX registers. Fastcall arguments are passed in the registers shown below. If you pass one character argument, it is passed in the AL register. If you pass two character arguments, the second argument is passed in DL, and so on. %@NL@% %@NL@% %@AB@%Argument Type%@AE@% %@AB@%Registers%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% Character AL, DL, BL Short integer AX, DX, BX Near pointer BX, AX, DX Long integer DX:AX ────────────────────────────────────────────────────────────────────────────%@NL@% %@AU@%WARNING%@AE@%%@NL@% %@NL@% Future versions of QuickC may pass fastcall arguments in different registers.%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% %@NL@% If all of the registers for a particular type have already been used, or if an argument is not one of the types listed above, it is pushed on the stack as usual. Given an argument list of types %@AB@%long%@AE@%, %@AB@%float%@AE@%, and %@AB@%short%@AE@%, QuickC passes the %@AB@%long %@AE@%in DX:AX, pushes the %@AB@%float%@AE@%, and passes the %@AB@%short %@AE@%in BX. Fastcall functions return any floating-point value on the floating-point processor stack. %@NL@% %@NL@% The treatment of character arguments is also dependent on prototypes. If there is no prototype, the argument is promoted to %@AB@%short%@AE@%. %@NL@% %@NL@% The %@AB@%_fastcall %@AE@%convention is not compatible with any of the following attributes: %@AB@%_interrupt%@AE@%, %@AB@%_saveregs%@AE@%, %@AB@%_export%@AE@%, %@AB@%_cdecl%@AE@%, %@AB@%_fortran%@AE@%, or %@AB@%_pascal%@AE@%. Consult online help for more information on these attributes. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00020049 @%%@AB@%2.3 New Language Features%@AE@%%@EH@%%@NL@% %@NL@% A number of new language features have been implemented in version 2.5 to maintain compatibility with Microsoft C version 6.0.%@CR:C6A00020050 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020051 @%%@AB@%2.3.1 Strings and Macros%@AE@%%@EH@%%@NL@% %@NL@% QuickC now allows longer string literals (up to 2K) and longer macro expansions (up to 12K). In low memory conditions, the macro expansion space could be limited to 6K.%@CR:C6A00020052 @%%@CR:C6A00020053 @%%@CR:C6A00020054 @%%@CR:C6A00020055 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020056 @%%@AB@%2.3.2 Tiny Memory Model (.COM Files)%@AE@%%@EH@%%@NL@% %@NL@% QuickC 2.5 supports the tiny memory model, which produces .COM files rather than .EXE files. In the tiny memory model, all of your program code and data must fit in a single 64K segment.%@CR:C6A00020057 @%%@CR:C6A00020058 @%%@CR:C6A00020059 @% %@NL@% %@NL@% The /AT option selects the tiny model. This option causes the linker to use the /NOE and /TINY options. Within the linker, /TINY turns on the /FARCALLTRANSLATION option to help eliminate far-segment relocations. If you invoke QLINK separately on your own .OBJ files, link with the CRTCOM library and make it first in the .OBJ list. The /TINY option is incompatible with the /INCREMENTAL option. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020060 @%%@AB@%2.3.3 Custom Memory Models%@AE@%%@EH@%%@NL@% %@NL@% For most programs, using one of the standard memory models is sufficient. In special cases, however, you may need to create a customized memory model. For example, you might want to create a huge-compact model that would allow huge data items but only one code segment.%@CR:C6A00020061 @%%@CR:C6A00020062 @%%@CR:C6A00020063 @% %@NL@% %@NL@% You can create a custom memory model with the /A compiler option. /A must be followed by three letters representing the following memory-model attributes: %@NL@% %@NL@% %@NL@% ■ Code pointer size%@NL@% %@NL@% ■ Data pointer size%@NL@% %@NL@% ■ Stack- and data-segment setup%@NL@% %@NL@% %@NL@% Table 2.1 shows the options used for defining code pointers, data pointers, and stack- and data-segment setup in custom memory models. %@NL@% %@NL@% %@AB@%Table %@AB@%2.1 Custom Memory Model Options%@AE@%%@AE@% %@TH: 22 932 02 34 08 34 @%Attribute Option Meaning %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@%Code Addresses s Near (16-bit) l Far (32-bit)Data Pointers n Near (6-bit) f Far (32-bit) h Huge (32-bit normalized)Stack-and Data-Segment Setup d Assume SS==DS (default) u Assume SS!=DS; DS is reloaded on function entry. w Assume SS!=DS; DS is not reloaded on function entry.%@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@%%@TE: 22 932 02 34 08 34 @% You must specify all three options, but the letters can follow /A in any order. To specify the huge-compact model mentioned earlier, for example, you can use /Ashd, /Ahsd, or some other ordering of the following letters: s (for near code addresses), h (for huge data pointers), and d (for the default data- and stacksegment setup). %@NL@% %@NL@% The easiest way to customize a memory model is to use a standard memory model and modify the stack-setup option. A stack- and data-segment option from Table 2.1 overrides the corresponding part of the standard memory-model configuration; Table 2.2 shows the standard models' equivalents. Since /AS is the equivalent of /Asnd, then /ASw is the equivalent of /Asnw. %@NL@% %@NL@% %@AB@%Table %@AB@%2.2 Standard Memory Model Equivalents%@AE@%%@AE@% %@TH: 17 458 03 22 54 @%Standard CustomizedMemory Model Equivalent%@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@%/AT none/AS /Asnd/AM /Alnd/AC /Asfd/AL /Alfd/AH /Alhd%@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@%%@TE: 17 458 03 22 54 @% %@NL@% %@3@%%@CR:C6A00020064 @%%@AB@%2.3.4 Omitting Names of Nested Structures and Unions%@AE@%%@EH@%%@NL@% %@NL@% If a structure or union is nested inside another structure or union, you can declare the inner one without using a variable name. This rule allows you to access inner members of such nested constructs using fewer variable names. The following example demonstrates this technique using nested structures:%@CR:C6A00020065 @%%@CR:C6A00020066 @%%@CR:C6A00020067 @% %@NL@% %@NL@% %@AS@% #include.h %@AS@% %@AS@% void main( void ) %@AS@% { %@AS@% struct ours %@AS@% { %@AS@% int mine, yours; %@AS@% }; %@AS@% %@AS@% struct mystruct %@AS@% { %@AS@% float bobber; %@AS@% struct ours; %@AS@% char name[9]; %@AS@% } sample; %@AS@% %@AS@% sample.yours = 100; %@AS@% printf( "sample.yours: %i\n", sample.yours ); %@AS@% }%@AE@%%@NL@% %@NL@% The example declares two structure types. The first structure type, named %@AS@% %@AS@%ours%@AE@%, contains two %@AB@%int%@AE@% members. The second, named %@AS@% mystruct%@AE@%, contains three members, one of which is a structure of type %@AS@% ours%@AE@%. %@NL@% %@NL@% The second structure type declares its structure member using only the structure tag %@AS@% ours%@AE@%. It does not supply a variable name after the tag: %@NL@% %@NL@% %@AS@% struct ours;%@AE@%%@NL@% %@NL@% Thus, subsequent parts of the program can access members of the nested structure without specifying a name: %@NL@% %@NL@% %@AS@% sample.yours = 100;%@AE@%%@NL@% %@NL@% In contrast, if the nested structure had been declared using a variable name, as in %@NL@% %@NL@% %@AS@% struct ours var_name;%@AE@%%@NL@% %@NL@% subsequent statements would have to use that name as well: %@NL@% %@NL@% %@AS@% sample.var_name.yours = 100;%@AE@%%@NL@% %@NL@% As you can see, declaring the nested structure without a variable name saves some typing. The same rule applies to unions nested inside structures. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020068 @%%@AB@%2.3.5 Unsized Arrays as the Last Member of a Structure%@AE@%%@EH@%%@NL@% %@NL@% QuickC now allows an unsized or zero-sized array as the last member of a structure. The declaration of such a structure would look like this:%@CR:C6A00020069 @%%@CR:C6A00020070 @%%@CR:C6A00020071 @% %@NL@% %@NL@% %@AS@% struct var_length %@AS@% { %@AS@% <set of declarations>; %@AS@% <type> array[]; %@AS@% };%@AE@%%@NL@% %@NL@% Unsized arrays can appear only as the last member of a structure. Structures containing unsized array declarations can be nested within other structures as long as no further members are declared in any enclosing structures. Arrays of such structures are not allowed. %@NL@% %@NL@% When you apply the %@AB@%sizeof %@AE@%operator to a variable of this type, or to the type itself, QuickC assumes the array has the size zero. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020072 @%%@AB@%2.3.6 Improved Warnings%@AE@%%@EH@%%@NL@% %@NL@% QuickC version 2.5 supports a new warning level (4), which provides even more stringent error checking than the warning levels in version 2.0. You can set this warning level from the command line by supplying the /W4 compiler option, or from the QuickC environment with the Compiler Flags dialog box shown with the Make command on the Options menu.%@CR:C6A00020073 @% %@NL@% %@NL@% At warning level 4, QuickC can generate the following new warnings: %@NL@% %@NL@% %@NL@% ■ Nonportable (non-ANSI) constructs%@NL@% %@NL@% ■ Undefined or implementation-defined constructs%@NL@% %@NL@% %@NL@% Consult online help for more information about these warnings. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020074 @%%@AB@%2.3.7 Macros%@AE@%%@EH@%%@NL@% %@NL@% The number of macros definable with /D options in QuickC has increased from 20 to 30.%@CR:C6A00020075 @%%@CR:C6A00020076 @% %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00020077 @%%@AB@%2.4 Changes and Deletions%@AE@%%@EH@%%@NL@% %@NL@% This section describes QuickC 2.0 features that are changed or deleted in QuickC 2.5. Note that these changes may affect existing programs. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020078 @%%@AB@%2.4.1 Deleted Features%@AE@%%@EH@%%@NL@% %@NL@% The %@AB@%data_seg%@AE@% pragma has been deleted.%@CR:C6A00020079 @%%@CR:C6A00020080 @% %@NL@% %@NL@% The memory management routine %@AB@%sbrk%@AE@% has been deleted. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020081 @%%@AB@%2.4.2 Conditional Compilation and Signed Values%@AE@%%@EH@%%@NL@% %@NL@% Version 2.0 of QuickC treats conditional-compilation expressions as %@AB@%signed %@AB@%long%@AE@% values. Version 2.5 evaluates these expressions using the same rules as expressions in C. For example, the expression%@CR:C6A00020082 @%%@CR:C6A00020083 @%%@CR:C6A00020084 @% %@NL@% %@NL@% %@AS@% #if 0xFFFFFFFFL > 1UL %@AS@% . %@AS@% . %@AS@% . %@AS@% #endif%@AE@%%@NL@% %@NL@% evaluates as true. It is evaluated as false in version 2.0, since the signed value would be less than the unsigned value. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020085 @%%@AB@%2.4.3 The const and volatile Qualifiers%@AE@%%@EH@%%@NL@% %@NL@% The %@AB@%const%@AE@% and %@AB@%volatile %@AE@%qualifiers must be placed after the type they qualify. The declaration%@CR:C6A00020086 @%%@CR:C6A00020087 @% %@NL@% %@NL@% %@AS@% int (const *p);%@AE@%%@NL@% %@NL@% is now treated as a syntax error. Previous versions of QuickC accept this construction. %@NL@% %@NL@% The following declarations are legal: %@NL@% %@NL@% %@AS@% int const *p_ci; /* pointer to constant int */ %@AS@% int const (*p_ci); /* pointer to constant int */ %@AS@% int *const cp_i; /* constant pointer to int */ %@AS@% int (*const cp_i); /* constant pointer to int */%@AE@%%@NL@% %@NL@% Consult online help for more information about %@AB@%const%@AE@% and %@AB@%volatile%@AE@%. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020088 @%%@AB@%2.4.4 Memory Allocation%@AE@%%@EH@%%@NL@% %@NL@% The %@AB@%_fmalloc %@AE@%function attempts to allocate far memory. In version 2.5, %@AB@%_fmalloc%@AE@% returns a null pointer if far memory isn't available, even if near memory is available. In previous versions of QuickC, %@AB@%_fmalloc%@AE@% calls %@AB@%_nmalloc %@AB@%%@AE@%if far memory is not available.%@CR:C6A00020089 @%%@CR:C6A00020090 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020091 @%%@AB@%2.4.5 Memory Used by Command-Line Arguments%@AE@%%@EH@%%@NL@% %@NL@% In QuickC 2.5, the command-line argument strings are allocated through %@AB@%malloc%@AE@%, which means they are in far memory in the compact and large memory models. Previous versions of QuickC place the command-line argument strings and environment strings in the near heap.%@CR:C6A00020092 @% %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020093 @%%@AB@%2.4.6 Format Specifiers in printf and scanf%@AE@%%@EH@%%@NL@% %@NL@% The %@AB@%printf%@AE@% format specifier modifiers %@AB@%N%@AE@%, %@AB@%F%@AE@%, %@AB@%h%@AE@%, and%@AB@% l%@AE@% have changed. These specifiers are documented in online help.%@CR:C6A00020094 @%%@CR:C6A00020095 @% %@NL@% %@NL@% The specifier %@AB@%%Np%@AE@% is a synonym for %@AB@%%hp%@AE@%, but the latter is preferred. Likewise, %@AB@%%Fp%@AE@% is a synonym for %@AB@%%lp%@AE@%. %@NL@% %@NL@% For %@AB@%scanf%@AE@%, the modifiers %@AB@%N%@AE@% and %@AB@%F%@AE@% refer to the distance to the object being read in; that is, whether the pointer itself is allocated near or far. The modifiers %@AB@%h%@AE@% and%@AB@% l%@AE@% refer to the size of the object (16-bit near pointer or 32-bit far pointer). In these examples, %@NL@% %@NL@% %@AS@% scanf("%Nlp", n_fp); %@AS@% scanf("%Fhp", f_np);%@AE@%%@NL@% %@NL@% the first line reads an address that resides in near memory (%@AS@%N%@AE@%) but holds a 32-bit far pointer variable (%@AS@%lp%@AE@%). The second line reads a near pointer value (%@AS@%hp%@AE@%) into a pointer variable that resides in far memory (%@AS@%F%@AE@%). %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020096 @%%@AB@%2.4.7 Functions that Return Float Values%@AE@%%@EH@%%@NL@% %@NL@% In QuickC 2.5, a prototype or definition such as%@CR:C6A00020097 @% %@NL@% %@NL@% %@AS@% float funcname();%@AE@%%@NL@% %@NL@% is interpreted as %@AS@% %@AE@%%@NL@% %@NL@% %@AS@% float funcname()%@AE@%%@NL@% %@NL@% so the function returns a %@AB@%float%@AE@% value. %@NL@% %@NL@% Whereas version 2.0 interprets it as %@AS@% %@AE@%%@NL@% %@NL@% %@AS@% double funcname()%@AE@%%@NL@% %@NL@% returning a %@AB@%double%@AE@% value. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00020098 @%%@AB@%2.4.8 The char Variable Alignment%@AE@%%@EH@%%@NL@% %@NL@% QuickC 2.5 does not align %@AB@%char%@AE@% variables on even addresses unless a variable is local. Similarly, literal constant strings are not aligned as they are in QuickC version 2.0%@CR:C6A00020099 @% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@CR:C6A00030001 @%%@1@%%@AB@%Chapter 3 Compiler, Linker, and Utility Changes%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% The QuickC Compiler version 2.5 supports a variety of new compiler, linker, and utility options. Most of these options provide compatibility with Microsoft C version 6.0. Since QuickC can be used as a prototyping environment for programs that will ultimately be compiled with Microsoft C, the compiler supports the development of programs that run under non-DOS operating systems. Refer to the Microsoft C version 6.0 documentation for additional information. %@NL@% %@NL@% This chapter is divided into sections alphabetically listing compiler, linker, and utility changes. For detailed information on the options, consult the online help. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00030002 @%%@AB@%3.1 Compiler Options%@AE@%%@EH@%%@NL@% %@NL@% The following compiler options are new to QuickC 2.5:%@CR:C6A00030003 @% %@NL@% %@NL@% %@AB@%Option%@AE@% %@AB@%Instruction%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% /A%@AI@%xxx%@AE@% Use custom memory model. The %@AI@%xxx%@AE@% is a three-letter representation of the memory-model attributes: code pointer size, data pointer size, and stack and data segment setup. You must use all three letters (in any order) following /A. See Chapter 2, "Language Differences," for additional information. /AT Use tiny memory model. This option creates a program with the .COM extension. The program has a single 64K segment for both code and data. /G1 Use 80186 instructions. /Gd Use the %@AB@%_cdecl%@AE@% calling convention for all functions in the module. See Chapter 2, "Language Differences," for more information. /Ge Generate calls to the stack-checking routine. /Gr Use the %@AB@%_fastcall%@AE@% calling convention for functions not explicitly given the %@AB@%%@AE@% %@AB@%_cdecl%@AE@%, %@AB@%_pascal%@AE@%, or %@AB@%_fortran%@AE@% attribute. See Chapter 2, "Language Differences," for additional information. /ND%@AI@%data_segment_name%@AE@% Name the data segment of a %@AI@%%@AE@% %@AI@%data_segment_name%@AE@% module. This option is commonly used to create and compile modules that contain only data. /nologo Suppress the startup banner display. /V%@AI@%string%@AE@% Embed %@AI@%string%@AE@%, which specifies a version number, in the object file. /W%@AI@%x%@AE@% Use warning level %@AI@%x%@AE@%, where %@AI@%x%@AE@% is from 0 to 4. %@AB@%Level%@AE@%%@AB@%Effect%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% 0 Turns off all warnings 1 Reports only severe errors 2 Reports intermediate level errors 3 Warns about been functions prototyped that have not 4 Reports violations detailed warnings and ANSI /WX Treat warnings as errors. %@NL@% %@2@%%@CR:C6A00030004 @%%@AB@%3.2 Linker Options%@AE@%%@EH@%%@NL@% %@NL@% The following linker options are new to QuickC 2.5:%@CR:C6A00030005 @% %@NL@% %@NL@% %@AB@%Option%@AE@% %@AB@%Instruction%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% /INC«REMENTAL» Prepare the program for subsequent incremental linking with ILINK. /NOL«OGO» Suppress the sign-on banner when QLINK starts. This option is incompatible with the /E and /T options. /NON«ULLSDOSSEG» Arrange segments in a specified order. /NON is equivalent to /DO except that /NON does not insert 16 null bytes at the beginning of the _TEXT segment. /PACKC«ODE» Use the /PACKC option in place of the /PAC option. /PACKD«ATA» Group neighboring data segments. /PADC«ODE»:%@AI@%bytes%@AE@% Add filler %@AI@%bytes%@AE@% to the end of each code module. /PADD«ATA»:%@AI@%bytes%@AE@% Add filler %@AI@%bytes%@AE@% to the end of each data module. /T«INY» Use the /T (tiny) memory model in place of the /BI (binary) option. %@NL@% %@2@%%@CR:C6A00030006 @%%@AB@%3.3 LIB Options%@AE@%%@EH@%%@NL@% %@NL@% The following LIB option is new to QuickC 2.5:%@CR:C6A00030007 @% %@NL@% %@NL@% %@AB@%Option%@AE@% %@AB@%Instruction%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% /NOL«OGO» Suppress the sign-on banner. %@NL@% %@2@%%@CR:C6A00030008 @%%@AB@%3.4 NMAKE Options%@AE@%%@EH@%%@NL@% %@NL@% The following NMAKE options are new to QuickC 2.5:%@CR:C6A00030009 @% %@NL@% %@NL@% %@AB@%Option%@AE@% %@AB@%Instruction%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% /NOLOGO Suppress the NMAKE sign-on banner. /HELP Display detailed help about NMAKE options. / ? Display abbreviated help about NMAKE options. %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@CR:C6A00040001 @%%@1@%%@AB@%Chapter 4 Library Changes%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% The QuickC Compiler version 2.5 incorporates over 100 new library routines to maintain compatibility with Microsoft C version 6.0. This chapter lists and briefly summarizes the new library routines by category. For a complete description of each routine, refer to online help. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00040002 @%%@AB@%4.1 Buffer-Manipulation Routines%@AE@%%@EH@%%@NL@% %@NL@% Routines preceded by the %@AB@%_f%@AE@% prefix are model-independent versions. The %@AB@%_f%@AE@% prefix indicates that these routines operate with far pointers.%@CR:C6A00040003 @%%@CR:C6A00040004 @% %@NL@% %@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% NOTE %@AI@%The buffer-manipulation routines assume that the direction flag is cleared. %@AI@%If you are using other functions with the buffer-manipulation functions, you %@AI@%must ensure that the other functions leave the direction flag alone or %@AI@%restore it to its original condition.%@AE@%%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_fmemccpy%@AE@% Copies the characters from one buffer to another until a given character or a given number of characters has been copied %@AB@%_fmemchr%@AE@% Returns a pointer to the first occurrence, within a specified number of characters, of a given character in the buffer %@AB@%_fmemcmp%@AE@% Compares a specified number of characters from two buffers %@AB@%_fmemcpy%@AE@% Copies a specified number of characters from one buffer to another %@AB@%_fmemicmp%@AE@% Compares a specified number of characters from two buffers without regard to case sensitivity %@AB@%_fmemmove%@AE@% Copies a specified number of characters from one buffer to another %@AB@%_fmemset%@AE@% Initializes a specified number of bytes in the buffer with a given character %@AB@%_outmem%@AE@% Prints text of a specified length from a memory buffer %@NL@% %@2@%%@CR:C6A00040005 @%%@AB@%4.2 Data-Conversion Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@CR:C6A00040006 @%%@CR:C6A00040007 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_strtold%@AE@% Converts a string to a %@AB@%long double%@AE@% value %@NL@% %@2@%%@CR:C6A00040008 @%%@AB@%4.3 Directory-Control Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@CR:C6A00040009 @%%@CR:C6A00040010 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_chdrive%@AE@% Changes the current drive %@AB@%_getdcwd%@AE@% Gets the current working directory for the specified drive %@AB@%_getdrive%@AE@% Gets the current disk drive %@NL@% %@2@%%@CR:C6A00040011 @%%@AB@%4.4 File-Handling Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@%%@CR:C6A00040012 @% %@CR:C6A00040013 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_fullpath%@AE@% Makes an absolute path name from a relative path name %@NL@% %@2@%%@CR:C6A00040014 @%%@AB@%4.5 Graphics Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@%%@CR:C6A00040015 @% %@CR:C6A00040016 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_getarcinfo%@AE@% Determines the endpoints, expressed in viewport coordinates, of the most recently drawn arc or pie %@AB@%_getgtextvector%@AE@% Gets the current orientation for font-text output %@AB@%_gettextwindow%@AE@% Gets the current text-window boundaries %@AB@%_getwritemode%@AE@% Gets the current logical write mode for line drawing %@AB@%_grstatus%@AE@% Returns the status of the most recent graphics function call %@AB@%_polygon%@AE@%,%@AB@%%@AE@% Draws or scan-fills a polygon %@AB@%_polygon_w%@AE@%,%@AB@%%@AE@% %@AB@%_polygon_wxy%@AE@% %@AB@%_scrolltextwindow%@AE@% Scrolls the current text window up or down %@AB@%_setgtextvector%@AE@% Sets the current orientation for font-text output %@AB@%_setwritemode%@AE@% Sets the logical write mode for line drawing %@NL@% %@2@%%@CR:C6A00040017 @%%@AB@%4.6 Stream Input and Output Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@CR:C6A00040018 @% %@CR:C6A00040019 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_fsopen%@AE@% Opens a stream with file sharing %@NL@% %@2@%%@CR:C6A00040020 @%%@AB@%4.7 Internationalization Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@CR:C6A00040021 @% %@CR:C6A00040022 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%localecov%@AE@% Sets members of a structure to appropriate values for formatting numeric quantities %@AB@%setlocale%@AE@% Selects the appropriate locale for the program %@AB@%strcoll%@AE@% Compares strings using locale-specific information %@AB@%strftime%@AE@% Formats a data and time string %@AB@%strxfrm%@AE@% Transforms a string based on locale-specific information %@NL@% %@2@%%@CR:C6A00040023 @%%@AB@%4.8 Math Routines%@AE@%%@EH@%%@NL@% %@NL@% Routines ending with %@AB@%l%@AE@% support an 80-bit data type for the corresponding routines. These routines return a %@AB@%long double%@AE@% value. %@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@%%@CR:C6A00040024 @% %@CR:C6A00040025 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%acosl%@AE@% Calculates the arccosine %@AB@%asinl%@AE@% Calculates the arcsine %@AB@%atanl%@AE@% Calculates the arctangent from tangent %@AB@%atan2l%@AE@% Calculates the arctangent from %@AI@%x%@AE@%, %@AI@%y%@AE@% %@AB@%cabsl%@AE@% Finds the absolute value of a complex number %@AB@%ceill%@AE@% Finds the integer ceiling %@AB@%cosl%@AE@% Calculates the cosine %@AB@%coshl%@AE@% Calculates the hyperbolic cosine %@AB@%expl%@AE@% Calculates the exponential function %@AB@%fabsl%@AE@% Finds the absolute value %@AB@%floorl%@AE@% Finds the largest integer less than or equal to the argument %@AB@%fmodl%@AE@% Finds the floating-point remainder %@AB@%frexpl%@AE@% Calculates an exponential value %@AB@%hypotl%@AE@% Calculates the hypotenuse of a right triangle %@AB@%ldexpl%@AE@% Converts the mantissa and exponent to a floating-point value %@AB@%logl%@AE@% Calculates the natural logarithm %@AB@%log10l%@AE@% Calculates the base-10 logarithm %@AB@%modfl%@AE@% Finds the integral and fractional parts of the argument %@AB@%powl%@AE@% Calculates a value raised to a power %@AB@%sinl%@AE@% Calculates the sine %@AB@%sinhl%@AE@% Calculates the hyperbolic sine %@AB@%sqrtl%@AE@% Finds the square root %@AB@%tanl%@AE@% Calculates the tangent %@AB@%tanhl%@AE@% Calculates the hyperbolic tangent %@NL@% %@2@%%@CR:C6A00040026 @%%@AB@%4.9 Memory-Allocation Routines%@AE@%%@EH@%%@NL@% %@NL@% Routines beginning with %@AB@%_b%@AE@% apply to based heaps. Routines with the %@AB@%_n%@AE@% prefix apply to near heaps. Routines beginning with %@AB@%_f%@AE@% apply to far heaps.%@CR:C6A00040027 @%%@CR:C6A00040028 @% %@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_bfreeseg%@AE@% Frees a based heap %@AB@%_bheapseg%@AE@% Allocates a based heap %@AB@%_bcalloc%@AE@%, %@AB@%_fcalloc%@AE@%, %@AB@%_ncalloc%@AE@% Allocates storage for an array %@AB@%_bexpand%@AE@%, %@AB@%_fexpand%@AE@%, %@AB@%_nexpand%@AE@% Expands or shrinks a block of memory %@AB@%_bfree%@AE@% Frees an allocated block %@AB@%_heapadd%@AE@%, %@AB@%_bheapadd%@AE@%, %@AB@%_fheapadd%@AE@%, %@AB@%%@AE@% Adds memory to a heap %@AB@%_nheapadd%@AE@% %@AB@%_bheapchk%@AE@%, %@AB@%_fheapchk%@AE@%, %@AB@%_nheapchk%@AE@% Checks a heap for consistency %@AB@%_heapmin%@AE@%,%@AB@%%@AE@% Releases unused memory in a heap %@AB@%_bheapmin%@AE@%,%@AB@%%@AE@% %@AB@%_fheapmin%@AE@%,%@AB@%%@AE@% %@AB@%_nheapmin%@AE@% %@AB@%_bheapset%@AE@% Fills free heap entries with a specified value %@AB@%_bheapwalk%@AE@% Returns information about each entry in a heap %@AB@%_bmalloc%@AE@% Allocates a block of memory %@AB@%_bmsize%@AE@% Returns the size of an allocated block %@AB@%_brealloc%@AE@%, %@AB@%_frealloc%@AE@%, %@AB@%_nrealloc%@AE@% Reallocates a block to a new size %@NL@% %@2@%%@CR:C6A00040029 @%%@AB@%4.10 Process- and Environment-Control Routines%@AE@%%@EH@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@CR:C6A00040030 @%%@CR:C6A00040031 @% %@CR:C6A00040032 @% %@CR:C6A00040033 @% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_cexit%@AE@% Calls functions registered by %@AB@%atexit%@AE@% and %@AB@%onexit%@AE@% (if any), then performs complete exit-termination procedures (such as flushing buffers) and returns control to the calling program %@AB@%_c_exit%@AE@% Performs quick exit-termination procedures and returns control to the calling program %@NL@% %@2@%%@CR:C6A00040034 @%%@AB@%4.11 String-Manipulation Routines%@AE@%%@EH@%%@NL@% %@NL@% Routines preceded by the %@AB@%_f%@AE@% prefix are model-independent versions. The %@AB@%_f%@AE@% prefix indicates that these routines operate with far pointers.%@CR:C6A00040035 @%%@CR:C6A00040036 @% %@NL@% %@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@% NOTE %@AI@%The string-manipulation routines assume that the direction flag is cleared. %@AI@%If you are using other functions with the string-manipulation routines, you %@AI@%must ensure that the other routines leave the direction flag alone or %@AI@%restore it to its original condition.%@AE@%%@NL@% ────────────────────────────────────────────────────────────────────────────%@NL@%%@NL@% %@NL@% %@AB@%Routine%@AE@% %@AB@%Effect%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%_fstrcat%@AE@% Appends one string to another %@AB@%_fstrchr%@AE@% Finds first occurrence of a given character in a string %@AB@%_fstrcmp%@AE@% Compares two strings %@AB@%_fstrcpy%@AE@% Copies one string to another %@AB@%_fstrcspn%@AE@% Finds first occurrence in a string of a character from a given character set %@AB@%_fstrdup%@AE@%, %@AB@%_nstrdup%@AE@% Duplicates a string %@AB@%_fstricmp%@AE@% Compares two strings without regard to case %@AB@%_fstrlen%@AE@% Finds the length of a string %@AB@%_fstrlwr%@AE@% Converts a string to lowercase %@AB@%_fstrncat%@AE@% Appends the characters of a string %@AB@%_fstrncmp%@AE@% Compares the characters of two strings %@AB@%_fstrncpy%@AE@% Copies the characters of one string to another %@AB@%_fstrnicmp%@AE@% Compares the characters of two strings without regard to case %@AB@%_fstrnset%@AE@% Sets the characters of string to a given character %@AB@%_fstrpbrk%@AE@% Finds first occurrence of a character from one string in another %@AB@%_fstrrchr%@AE@% Finds last occurrence of given character in string %@AB@%_fstrrev%@AE@% Reverses a string %@AB@%_fstrset%@AE@% Sets all the characters of a string to a given character %@AB@%_strspn%@AE@%, %@AB@%_fstrspn%@AE@% Finds first substring from given a character set in string %@AB@%_fstrstr%@AE@% Finds first occurrence of a given string in another %@AB@%_fstrtok%@AE@% Finds next token in a string %@AB@%_fstrupr%@AE@% Converts a string to uppercase %@NL@% %@NL@% %@NL@% %@NL@% %@NL@% %@CR:C6A00050001 @%%@1@%%@AB@%Chapter 5 Error-Message Reference%@AE@%%@EH@%%@NL@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@NL@% This chapter lists error messages that are new with the QuickC Compiler version 2.5. Error messages common to versions 2.0 and 2.5 are documented in the %@AI@% Microsoft QuickC Tool Kit%@AE@%. %@NL@% %@NL@% %@NL@% %@2@%%@CR:C6A00050002 @%%@AB@%5.1 Compiler Errors%@AE@%%@EH@%%@NL@% %@NL@% The error messages produced by the C compiler fall into three categories:%@CR:C6A00050003 @% %@NL@% %@NL@% %@NL@% 1. Fatal-error messages%@NL@% %@NL@% 2. Compilation-error messages%@NL@% %@NL@% 3. Warning messages%@NL@% %@NL@% %@NL@% New error messages for each category are listed below in numerical order, with a brief explanation of each error. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00050004 @%%@AB@%5.1.1 Fatal-Error Messages%@AE@%%@EH@%%@NL@% %@NL@% Fatal-error messages indicate a severe problem, one that prevents the compiler from processing your program any further. These messages have the following format: %@NL@% %@NL@% %@AI@%%@AE@%filename%@AS@%(%@AE@%%@AI@%line%@AS@%) : fatal error C1%@AE@%xxx%@AS@%:%@AE@% messagetext%@AE@% %@NL@% %@NL@% After the compiler displays a fatal-error message, it terminates without producing an object file or checking for further errors.%@CR:C6A00050005 @%%@CR:C6A00050006 @%%@CR:C6A00050007 @% %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Fatal-Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%C1005%@AE@% %@AB@%string too big for buffer%@AE@% A string in a compiler intermediate file overflowed a buffer. %@AB@%C1006%@AE@% %@AB@%write error on compiler intermediate %@AE@% %@AB@%file%@AE@% The compiler was unable to create the intermediate files used in the compilation process. %@AB@%C1011%@AE@% %@AB@%compiler limit : '%@AE@%%@AI@%identifier%@AE@%%@AB@%' : macro %@AE@% %@AB@%definition too big%@AE@% The macro definition was longer than allowed. Split the definition into shorter definitions. %@AB@%C1023%@AE@% %@AB@%cannot open source file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% The given file either did not exist, could not be opened, or was not found. Make sure the environment settings are valid and that the correct path name for the file is specified. If this error appears without an error message, the compiler has run out of file handles. If in DOS, increase the number of file handles by changing the FILES setting CONFIG.SYS to allow a larger number of open files. FILES=20 is the recommended setting. %@AB@%C1024%@AE@% %@AB@%cannot open include file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% The specified file in an %@AB@%#include%@AE@% preprocessor directive could not be found. Make sure settings for the INCLUDE and TMP environment variables are valid and that the correct path name for the file is specified. If this error appears without an error message, the compiler has run out of file handles. If in DOS, increase the number of file handles by changing the FILES setting in CONFIG.SYS to allow a larger number of open files. FILES%@AS@%=%@AE@%20 is the recommended setting. %@AB@%C1025%@AE@% %@AB@%compiler terminated by user%@AE@% The compiler was stopped by the user. %@AB@%C1026%@AE@% %@AB@%parser stack overflow, please simplify %@AE@% %@AB@%your program%@AE@% The program cannot be processed because the space required to parse the program causes a stack overflow in the compiler. Simplify the program by decreasing the complexity of expressions. Decrease the level of nesting in for and switch statements by putting some of the more deeply nested statements in separate functions. Break up very long expressions involving ',' operators or function calls. %@AB@%C1027%@AE@% %@AB@%DGROUP data allocation exceeds 64K%@AE@% More than 64K of variables were allocated to the default data segment. For compact-, large-, or huge-model programs, compile with the QCL command and use the /Gt option to move items into separate segments. In small- or medium-model programs, consider explicitly allocating some variables outside of DGROUP by using %@AB@%_based%@AE@% or %@AB@%%@AE@% %@AB@%_far%@AE@%. %@AB@%C1033%@AE@% %@AB@%cannot open assembly language output %@AE@% %@AB@%file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% There are three possible causes for this error: ■ The given name is not valid. ■ The file cannot be opened for lack of space. ■ A read-only file with the given name already exists. %@AB@%C1036%@AE@% %@AB@%cannot open source listing file '%@AE@%%@AI@%%@AE@% %@AI@%filename%@AE@%%@AB@%'%@AE@% There are three possible causes for this error: ■ The given name is not valid. ■ The file cannot be opened for lack of space. ■ A read-only file with the given name already exists. %@AB@%C1040%@AE@% %@AB@%unexpected end-of-file in source file '%@AE@%%@AI@%%@AE@% %@AI@%filename%@AE@%%@AB@%'%@AE@% The compiler detected an unexpected end-of-file condition while creating a source listing or mingled source/object listing. %@AB@%C1042%@AE@% %@AB@%cannot open compiler intermediate file -%@AE@% %@AB@%no such file or directory%@AE@% The compiler could not create intermediate files for use in the compilation process because the TMP environment variable was set to an invalid directory or path. %@AB@%C1043%@AE@% %@AB@%cannot open compiler intermediate file%@AE@% The compiler could not create intermediate files for use in the compilation process. The exact reason could not be determined. One of the following may be a solution: ■ Make sure that the environment variable TMP points to a drive and directory in which a file can be created. ■ Delete unneeded files in the TMP directory. %@AB@%C1044%@AE@% %@AB@%out of disk space for compiler %@AE@% %@AB@%intermediate file%@AE@% The compiler could not create intermediate files for use in the compilation process because no more space was available. Make more space available on the disk pointed to by the TMP environment variable and then recompile. %@AB@%C1050%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : code segment too large%@AE@% A code segment grew to within 36 bytes of 64K during compilation. A 36-byte pad is used because of a bug in some 80286 chips that can cause programs to exhibit strange behavior when, among other conditions, the size of a code segment is within 36 bytes of 64K. %@AB@%C1057%@AE@% %@AB@%unexpected end-of-file in macro %@AE@% %@AB@%expansion (missing ')'?)%@AE@% The compiler has encountered the end of the source file while gathering the arguments of a macro invocation. Usually this is the result of a missing closing parenthesis, ), on the macro invocation. %@AB@%C1064%@AE@% %@AB@%compiler limit : token overflowed %@AE@% %@AB@%internal buffer%@AE@% The compiler read an identifier that is longer than the internal buffer used for identifier names. Shorten the name and recompile. %@AB@%C1071%@AE@% %@AB@%unexpected end-of-file found in comment%@AE@% The compiler found the end of a file while scanning a comment. Probably a comment was not terminated. Begin at the end of the file and search backward for the beginning of a comment. A comment begins with "/*" and ends with "*/" as in: /* This is a comment */ A comment may not be split across files. %@AB@%C1072%@AE@% %@AB@%'%@AE@%%@AI@%filename%@AE@%%@AB@%' : cannot read file%@AE@% The compiler encountered an error when trying to read a file. Check the file-access attributes and be sure the disk does not have a bad sector. %@AB@%C1090%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' data allocation exceeds 64K%@AE@% The size of the named segment exceeds 64K. This error occurs with %@AB@%_based%@AE@% allocation. %@AB@%C1127%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%': segment redefinition%@AE@% A segment was overwritten by another with the same name. For example, compiling in large model with %@AS@%#pragma alloc_text("TEXT", func1)%@AE@% creates two segments: the default segment "module_TEXT" and the specified segment "_TEXT". However, in small model, the default segment is "_TEXT", and the specified segment "_TEXT" will overwrite the default segment. %@NL@% %@3@%%@CR:C6A00050008 @%%@AB@%5.1.2 Compilation-Error Messages%@AE@%%@EH@%%@NL@% %@NL@% The messages listed below indicate that your program has errors. They appear in the following format:%@CR:C6A00050009 @%%@CR:C6A00050010 @% %@NL@% %@NL@% %@AI@%%@AE@%filename%@AS@%(%@AE@%%@AI@%line%@AS@%) : error C2%@AE@%xxx%@AS@%:%@AE@% messagetext%@AE@% %@NL@% %@NL@% When the compiler encounters any of the errors listed in this section, it continues parsing the program (if possible) and outputs additional error messages. However, no object file is produced. %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Compilation-Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%C2027%@AE@% %@AB@%use of undefined enum/struct/union '%@AE@%%@AI@%%@AE@% %@AI@%identifier%@AE@%%@AB@%'%@AE@% The given identifier referred to a structure or union type that was not defined. %@AB@%C2041%@AE@% %@AB@%illegal digit '%@AE@%%@AI@%character%@AE@%%@AB@%' for base '%@AE@%%@AI@%%@AE@% %@AI@%number%@AE@%%@AB@%'%@AE@% The given character was not a legal digit for the base used. %@AB@%C2080%@AE@% %@AB@%illegal far _fastcall function%@AE@% A %@AB@%far _fastcall%@AE@% function may not be compiled with the /Gw option, or with the /GW option, if stack checking is enabled. %@AB@%C2121%@AE@% %@AB@%'%@AE@%%@AI@%operator%@AE@%%@AB@%' : bad left/right operand%@AE@% The left or right operand of the given operator was illegal for that operator. %@AB@%C2124%@AE@% %@AB@%divide or mod by zero%@AE@% A constant expression was evaluated and found to have a zero denominator. %@AB@%C2128%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : huge array cannot be %@AE@% %@AB@%aligned to segment boundary%@AE@% The given huge array was large enough to cross two segment boundaries, but could not be aligned to both boundaries to prevent an individual array element from crossing a boundary. If the size of a huge array causes it to cross two boundaries, the size of each array element must be a power of two, so that a whole number of elements will fit between two segment boundaries. %@AB@%C2129%@AE@% %@AB@%static function '%@AE@%%@AI@%function%@AE@%%@AB@%' not found%@AE@% A forward reference was made to a static function that was never defined. %@AB@%C2136%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : prototype must have %@AE@% %@AB@%parameter types%@AE@% A function prototype declarator had formal-parameter names, but no types were provided for the parameters. A formal parameter in a function prototype must either have a type or be represented by an ellipsis (...) to indicate a variable number of arguments and no type checking. One cause of this error is a misspelling of a type name in a prototype that does not provide the names of formal parameters. %@AB@%C2154%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : does not refer to a segment %@AE@% %@AB@%name%@AE@% A %@AB@%_based%@AE@%-allocated variable must be allocated in a segment unless it is extern and uninitialized. %@AB@%C2157%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : must be declared before use%@AE@% %@AB@%in pragma list%@AE@% The function name in the list of functions for an %@AB@%alloc_text%@AE@% pragma has not been declared prior to being referenced in the list. %@AB@%C2158%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : is a function%@AE@% The given identifier was specified in the list of variables in a %@AB@%same_seg%@AE@% pragma but was previously declared as a function. %@AB@%C2163%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : not available as an %@AE@% %@AB@%intrinsic function%@AE@% A function specified in the list of functions for an intrinsic or function pragma is not one of the functions available in intrinsic form. %@AB@%C2164%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : intrinsic function not %@AE@% %@AB@%declared%@AE@% The given function was not declared before being used in an intrinsic pragma. This error appears only when compiling with the /Oi option. %@AB@%C2167%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : too many actual parameters %@AE@% %@AB@%for intrinsic function%@AE@% A reference to the intrinsic function name contained too many actual parameters. %@AB@%C2168%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : too few actual parameters %@AE@% %@AB@%for intrinsic function%@AE@% A reference to the intrinsic function name contained too few actual parameters. %@AB@%C2169%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : intrinsic function, cannot %@AE@% %@AB@%be defined%@AE@% An attempt was made to provide a function definition for a function already declared as an intrinsic. %@AB@%C2170%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : not declared as a %@AE@% %@AB@%function, cannot be intrinsic%@AE@% The intrinsic pragma was used for an item other than a function, or for a function that does not have an intrinsic form. %@AB@%C2178%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : storage class for %@AE@% %@AB@%same_seg variables must be extern%@AE@% The given variable was specified in a %@AB@%%@AE@% %@AB@%same_seg%@AE@% pragma, but it was not declared with extern storage class. %@AB@%C2179%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : was used in same_seg%@AE@%%@AB@%, but%@AE@% %@AB@%storage class is no longer extern%@AE@% The given variable was specified in a %@AB@%%@AE@% %@AB@%same_seg%@AE@% pragma, but it was redeclared with a storage class other than extern. %@AB@%C2185%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : illegal _based allocation%@AE@% A %@AB@%_based%@AE@%-allocated variable that explicitly has extern storage class and is uninitialized may not have a base of any of the following: ■ (_segment) & var ■ _segname("_STACK") ■ (_segment)_self ■ void If the variable does not explicitly have extern storage class or it is uninitialized, then its base must use _segname("g") where g is any segment name or reserved segment name except "_STACK". %@AB@%C2189%@AE@% %@AB@%#error : '%@AE@%%@AI@%string%@AE@%%@AB@%'%@AE@% An %@AB@%#error%@AE@% directive was encountered. The %@AI@%string%@AE@% is the descriptive text supplied in the directive. %@AB@%C2193%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : already in a segment%@AE@% A variable in the %@AB@%same_seg%@AE@% pragma has already been allocated in a segment, using %@AB@%_based%@AE@%. %@AB@%C2194%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : is a text segment%@AE@% The given text segment was used where a %@AB@%%@AE@% %@AB@%data%@AE@%, %@AB@%const%@AE@%, or %@AB@%bss%@AE@% segment was expected. %@AB@%C2195%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : is a data segment%@AE@% The given data segment was used where a text segment was expected. %@AB@%C2196%@AE@% %@AB@%/ML cannot be used with floating point%@AE@% The /ML option requires alternate math. QuickC does not support alternate math. The /ML option is allowed only when no floating-point code is used. %@AB@%C2200%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : function has already been %@AE@% %@AB@%defined%@AE@% A function name passed as an argument in an %@AB@%alloc_text%@AE@% pragma has already been defined. %@AB@%C2201%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : storage class must be %@AE@% %@AB@%extern%@AE@% A function declaration appears within a block, but the function is not declared extern. This causes an error if the /Za option is in effect. For example, the following example code causes this error, when compiled with /Za: %@AS@%main()%@AE@% %@AS@%{%@AE@% %@AS@% static int func1();%@AE@% %@AS@%}%@AE@% %@AB@%C2207%@AE@% %@AB@%'%@AE@%%@AI@%member%@AE@%%@AB@%' in struct/union '%@AE@%%@AI@%tag%@AE@%%@AB@%' has a %@AE@% %@AB@%zero-sized array%@AE@% The given member in the given structure or union contains an array without a subscript or with a zero subscript. Such an array is legal only as the last member of a structure or union. %@AB@%C2208%@AE@% %@AB@%no members defined using this type%@AE@% An %@AB@%enum%@AE@%, %@AB@%struct%@AE@%, or %@AB@%union%@AE@% was defined without any members. This is an error only when compiling with /Za; otherwise, it is a warning. %@AB@%C2209%@AE@% %@AB@%type cast in _based construct must be %@AE@% %@AB@%(_segment)%@AE@% The only type allowed within a cast in a %@AB@%_based%@AE@% declarator is (%@AB@%_segment%@AE@%). %@AB@%C2210%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : must be near/far data %@AE@% %@AB@%pointer%@AE@% The base in a %@AB@%_based%@AE@% declarator may not be an array, a function, or a %@AB@%_based%@AE@% pointer. %@AB@%C2211%@AE@% %@AB@%(_segment) applied to function %@AE@% %@AB@%identifier '%@AE@%%@AI@%function%@AE@%%@AB@%'%@AE@% The item cast in a %@AB@%_based%@AE@% declarator must not be a function. %@AB@%C2212%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : _based not available for %@AE@% %@AB@%functions/pointers to functions%@AE@% Functions cannot be %@AB@%_based%@AE@%-allocated. Use the %@AB@%alloc_text%@AE@% pragma. %@AB@%C2213%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : illegal argument to %@AE@% %@AB@%_based%@AE@% A symbol used as a base must have type %@AB@%%@AE@% %@AB@%_segment%@AE@% or be a near or far pointer. %@AB@%C2214%@AE@% %@AB@%pointers based on void require the use %@AE@% %@AB@%of :>%@AE@% A %@AB@%_based%@AE@% pointer based on void cannot be dereferenced. Use the :> operator to create an address that can be dereferenced. %@AB@%C2215%@AE@% %@AB@%:> operator only for objects based on %@AE@% %@AB@%void%@AE@% The right operand of the :> operator must be a pointer based on void, as in %@AS@%char _based(void) *cbvpi%@AE@% %@AB@%C2216%@AE@% %@AB@%'%@AE@%%@AI@%attribute1%@AE@%%@AB@%' may not be used with '%@AE@%%@AI@%%@AE@% %@AI@%attribute2%@AE@%%@AB@%'%@AE@% The given function attributes are incompatible. Some combinations of attributes that cause this error are ■ %@AB@%_saveregs%@AE@% and %@AB@%_interrupt%@AE@% ■ %@AB@%_fastcall%@AE@% and %@AB@%_saveregs%@AE@% ■ %@AB@%_fastcall%@AE@% and %@AB@%_interrupt%@AE@% ■ %@AB@%_fastcall%@AE@% and %@AB@%_export%@AE@% %@AB@%C2217%@AE@% %@AB@%'%@AE@%%@AI@%attribute1%@AE@%%@AB@%' must be used with '%@AE@%%@AI@%%@AE@% %@AI@%attribute2%@AE@%%@AB@%'%@AE@% The first function attribute requires the second attribute to be used. Some causes for this error include ■ An interrupt function explicitly declared as near. Interrupt functions must be far. ■ An interrupt function or a function with a variable number of arguments, when that function is declared with the %@AB@%%@AE@% %@AB@%_fortran%@AE@%, %@AB@%_pascal%@AE@%, or %@AB@%_fastcall%@AE@% attribute. Functions declared with the _interrupt attribute or with a variable number of arguments must use the C calling conventions. Remove the %@AB@%%@AE@% %@AB@%_fortran%@AE@%, %@AB@%_pascal%@AE@%, or %@AB@%_fastcall%@AE@% attribute from the function declaration. %@AB@%C2218%@AE@% %@AB@%type in _based construct must be void%@AE@% The only type allowed within a %@AB@%_based%@AE@% construct is %@AB@%void%@AE@%. %@AB@%C2219%@AE@% %@AB@%syntax error : type qualifier must be %@AE@% %@AB@%after '*'%@AE@% Either %@AB@%const%@AE@% or %@AB@%volatile%@AE@% appeared where a type or qualifier is not allowed, as in %@AS@%int (const *p);%@AE@% %@AB@%C2220%@AE@% %@AB@%warning treated as error - no object %@AE@% %@AB@%file generated%@AE@% When the compiler option /WX is used, the first warning generated by the compiler causes this error message to be displayed. Either correct the condition that caused the warning, or compile at a lower warning level or without /WX. %@AB@%C2221%@AE@% %@AB@%'.' : left operand points to %@AE@% %@AB@%struct/union, use '->'%@AE@% The left operand of the '.' operator must be a struct/union type. It cannot be a pointer to a %@AB@%struct%@AE@%/%@AB@%union%@AE@% type. This error usually means that a '->' operator must be used. %@AB@%C2222%@AE@% %@AB@%'->' : left operand has struct/union %@AE@% %@AB@%type, use '.'%@AE@% The left operand of the '->' operator must be a pointer to a %@AB@%struct%@AE@%/%@AB@%union%@AE@% type. It cannot be a %@AB@%struct%@AE@%/%@AB@%union%@AE@% type. This error usually means that a '.' operator must be used. %@AB@%C2223%@AE@% %@AB@%left of '%@AE@%%@AI@%-> member%@AE@%%@AB@%' must point to %@AE@% %@AB@%struct/union%@AE@% The left operand of the '->' operator is not a pointer to a %@AB@%struct%@AE@%/%@AB@%union%@AE@% type. This error can occur when the left operand is an undefined variable. Undefined variables have type %@AB@%int%@AE@%. %@AB@%C2224%@AE@% %@AB@%left of '%@AE@%%@AI@%.member%@AE@%%@AB@%' must have struct/union%@AE@% %@AB@%type%@AE@% The left operand of the '.' operator is not a %@AB@%struct%@AE@%/%@AB@%union%@AE@% type. This error can occur when the left operand is an undefined variable. Undefined variables have type %@AB@%int%@AE@%. %@AB@%C2225%@AE@% %@AB@%'%@AE@%%@AI@%tagname%@AE@%%@AB@%' : first member of struct is %@AE@% %@AB@%unnamed%@AE@% The %@AB@%struct%@AE@% with the given tag started with an unnamed member (an alignment member). %@AB@%Struct%@AE@% definitions must start with a named member. %@AB@%C2418%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : not in a register%@AE@% An in-line assembler instruction referenced a variable with register storage class that has not actually been allocated in a register. To correct this, remove the register keyword from the variable definition, and make sure that this instruction is legal with a memory operand. %@AB@%C2429%@AE@% %@AB@%'%@AE@%%@AI@%label%@AE@%%@AB@%' : illegal far label reference%@AE@% %@AB@%FAR PTR%@AE@% may not be used on jumps or calls to labels. Far references to functions are allowed as long as the function has been declared. %@NL@% %@3@%%@CR:C6A00050011 @%%@AB@%5.1.3 Warning Messages%@AE@%%@EH@%%@NL@% %@NL@% The messages listed in this section indicate potential problems but do not hinder compiling and linking.%@CR:C6A00050012 @%%@CR:C6A00050013 @%%@CR:C6A00050014 @% %@NL@% %@NL@% %@AB@%Number %@AE@% %@AB@%Warning Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%C4001%@AE@% %@AB@%nonstandard extension used - '%@AE@%%@AI@%extension%@AE@%%@AB@%'%@AE@% The given nonstandard language extension was used when the /Ze option was specified. If the /Za option has been specified, this condition generates a syntax error. %@AB@%C4007%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : must be '%@AE@%%@AI@%attribute%@AE@%%@AB@%'%@AE@% The attribute of the given function was not explicitly stated. The compiler forced the attribute. For example, the function main must have the %@AB@%_cdecl%@AE@% attribute. %@AB@%C4008%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : _fastcall attribute on %@AE@% %@AB@%data ignored%@AE@% The %@AB@%_fastcall%@AE@% attribute on the given data identifier was ignored. %@AB@%C4023%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : _based pointer passed to %@AE@% %@AB@%unprototyped function: parameter '%@AE@%%@AI@%number%@AE@% %@AB@%'%@AE@% When in a near data model, only the offset portion of a %@AB@%_based%@AE@% pointer is passed to an unprototyped function. If the function expects a far pointer, the resulting code will be wrong. In any data model, if the function is defined to take a %@AB@%_based%@AE@% pointer with a different base, the resulting code may be unpredictable. If a prototype is used before the call, the call will be generated correctly. %@AB@%C4050%@AE@% %@AB@%'%@AE@%%@AI@%operator%@AE@%%@AB@%' : different code attributes%@AE@% The function-pointer expressions used with %@AI@%operator%@AE@% had different code attributes. The attribute involved is either %@AB@%_export%@AE@% or%@AB@%_loadds%@AE@%. This is a warning and not an error, because %@AB@%_export%@AE@% and %@AB@%_loadds%@AE@% affect only entry sequences and not calling conventions. %@AB@%C4054%@AE@% %@AB@%insufficient memory may affect %@AE@% %@AB@%optimization%@AE@% Not enough memory was available to do all requested optimizations. This message appears if available memory is within 64K of the absolute minimum that will accommodate the executable file. %@AB@%C4056%@AE@% %@AB@%floating-point overflow%@AE@% The compiler generated a floating-point exception while doing constant arithmetic on floating-point items at compile time. For example: %@AS@%float fp_val = 1.0e100;%@AE@% In this example, the floating-point constant %@AS@% 1.0e100 %@AE@% exceeds the maximum allowable value for a double-precision data item. %@AB@%C4059%@AE@% %@AB@%segment lost in conversion%@AE@% The conversion of a far pointer (a full segmented address) or %@AB@%_based%@AE@% pointer to a near pointer (a segment offset) or %@AB@%%@AE@% %@AB@%_based%@AE@% pointer resulted in the loss of the segment address. %@AB@%C4063%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : function too large for %@AE@% %@AB@%post-optimizer%@AE@% Not enough space was available to optimize the given function. One of the following may be a solution: ■ Recompile with fewer optimizations. ■ Divide the function into two or more smaller functions. %@AB@%C4065%@AE@% %@AB@%recoverable heap overflow in %@AE@% %@AB@%post-optimizer - some optimizations may %@AE@% %@AB@%be missed%@AE@% Some optimizations were skipped because not enough space was available for optimization. One of the following may be a solution: ■ Recompile with fewer optimizations. ■ Divide the function into two or more smaller functions. %@AB@%C4066%@AE@% %@AB@%local symbol-table overflow - some local%@AE@% %@AB@%symbols may be missing in listings%@AE@% The listing generator ran out of heap space for local variables, so the source listing may not contain symbol-table information for all local variables. %@AB@%C4067%@AE@% %@AB@%unexpected characters following '%@AE@%%@AI@%%@AE@% %@AI@%directive%@AE@%%@AB@%' directive - newline expected%@AE@% Extra characters followed a preprocessor directive and were ignored. This warning appears only when compiling with the /Za option. For example, the following code causes this warning: %@AS@%#endif NO_EXT_KEYS%@AE@% To remove the warning, compile with /Ze or use comment delimiters: %@AS@%#endif /* NO_EXT_KEYS */%@AE@% %@AB@%C4072%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : no function prototype on %@AE@% %@AB@%_fastcall function%@AE@% A %@AB@%_fastcall%@AE@% function was called without first being prototyped. Functions that are %@AB@%_fastcall%@AE@% should be prototyped to guarantee that the registers assigned at each point of call are the same as the registers assumed when the function is defined. A function defined in the new ANSI style is a prototype. A prototype must be added when this warning appears, unless the function takes no arguments or takes only arguments that cannot be passed in the general- purpose registers. %@AB@%C4073%@AE@% %@AB@%scoping too deep, deepest scoping merged%@AE@% %@AB@%when debugging%@AE@% Declarations appeared at a static nesting level greater than 13. As a result, all de-clarations beyond this level will seem to appear at the same level. %@AB@%C4078%@AE@% %@AB@%case constant '%@AE@%%@AI@%value%@AE@%%@AB@%' too big for the %@AE@% %@AB@%type of switch expression%@AE@% A value appearing in a case statement was larger than the size of the type in the %@AB@%switch%@AE@% expression. The compiler converted the case value to the type of the %@AB@%switch%@AE@% expression. A problem can occur when two case constants have different values before being cast but the same value afterward. %@AB@%C4080%@AE@% %@AB@%expected identifier for segment name, %@AE@% %@AB@%found '%@AE@%%@AI@%token%@AE@%%@AB@%'%@AE@% The first argument in the argument list for the %@AB@%alloc_text%@AE@% pragma is missing a segment name. This happens if the first token in the argument list is not an identifier. The pragma was ignored. %@AB@%C4081%@AE@% %@AB@%expected a comma, found '%@AE@%%@AI@%token%@AE@%%@AB@%'%@AE@% A comma (,) was missing between two arguments of a pragma. The pragma was ignored. %@AB@%C4096%@AE@% %@AB@%'%@AE@%%@AI@%attribute1%@AE@%%@AB@%' must be used with '%@AE@%%@AI@%%@AE@% %@AI@%attribute2%@AE@%%@AB@%'%@AE@% The use of %@AI@%attribute2%@AE@% requires the use of %@AI@%attribute1%@AE@%. For example, using a variable number of arguments (...) requires that %@AB@%_cdecl%@AE@% be used. Also, _interrupt functions must be %@AB@%_far%@AE@% and %@AB@%_cdecl%@AE@%. The compiler assumed %@AI@%attribute1%@AE@% for the function. %@AB@%C4104%@AE@% %@AB@%'%@AE@%%@AI@%identifier%@AE@%%@AB@%' : near data in same_seg %@AE@% %@AB@%pragma, ignored%@AE@% The given near variable was specified in a %@AB@%same_seg%@AE@% pragma. The %@AI@%identifier%@AE@% was ignored. %@AB@%C4106%@AE@% %@AB@%pragma requires integer between 1 and %@AE@% %@AB@%127%@AE@% An integer constant in the range 1-127 must be specified with the %@AB@%page%@AE@% and %@AB@%skip%@AE@% pragmas. The compiler assumed 1 was specified. %@AB@%C4107%@AE@% %@AB@%pragma requires integer between 15 and %@AE@% %@AB@%255%@AE@% An integer constant in the range 15-255 must be specified with the %@AB@%pagesize%@AE@% pragma. The compiler assumed 63 was specified. %@AB@%C4108%@AE@% %@AB@%pragma requires integer between 79 and %@AE@% %@AB@%132%@AE@% An integer constant in the range 79-132 must be specified with the %@AB@%linesize%@AE@% pragma. The compiler assumed 79 was specified. %@AB@%C4119%@AE@% %@AB@%different bases '%@AE@%%@AI@%name1%@AE@%%@AB@%' and '%@AE@%%@AI@%name2%@AE@%%@AB@%' %@AE@% %@AB@%specified%@AE@% The %@AB@%_based%@AE@% pointers in the expression have different symbolic bases. There may be truncation or loss in the code generated. %@AB@%C4120%@AE@% %@AB@%_based/unbased mismatch%@AE@% The expression contains a conversion between a %@AB@%_based%@AE@% pointer and another pointer that is unbased. Some information may have been truncated. This warning commonly occurs when a %@AB@%%@AE@% %@AB@%_based%@AE@% pointer is passed to a function that accepts a near or far pointer. %@AB@%C4123%@AE@% %@AB@%different base expressions specified%@AE@% The expression contains a conversion between %@AB@%_based%@AE@% pointers, but the base expressions of the %@AB@%_based%@AE@% pointers are different. Some of the %@AB@%_based%@AE@% conversions may be unexpected. %@AB@%C4124%@AE@% %@AB@%_fastcall with stack checking is %@AE@% %@AB@%inefficient%@AE@% The %@AB@%_fastcall%@AE@% keyword is used for generating fast code, but stack checking causes slower code to be generated. Use the /Gs option or the %@AB@%check_stack%@AE@% pragma to turn off stack checking when using %@AB@%_fastcall%@AE@%. This warning is informational and is issued only for the first function declared under these conditions. %@AB@%C4125%@AE@% %@AB@%decimal digit terminates octal escape %@AE@% %@AB@%sequence%@AE@% An octal escape sequence in a character or string constant was terminated with a decimal digit. The compiler evaluated the octal number without the decimal digit, and assumed the decimal digit was a character. The following example causes this warning: %@AS@%char array1[] = "\\709";%@AE@% If the digit 9 was intended as a character and was not a typing error, correct the example as follows: %@AS@%char array[] = "\\0709"; /* String %@AE@% %@AS@%containing "89" */%@AE@% %@AB@%C4126%@AE@% %@AB@%'%@AE@%%@AI@%flag%@AE@%%@AB@%' : unknown memory model flag%@AE@% The flag used with the /A option was not recognized and was ignored. %@AB@%C4127%@AE@% %@AB@%conditional expression is constant%@AE@% The controlling expression of an if statement or while loop evaluates to a constant. As a result, the code in the body of the if statement or while loop is either always executed or never executed. This warning is informational. %@AB@%C4128%@AE@% %@AB@%storage-class specifier after type%@AE@% A storage-class specifier (auto, extern, register, static) appears after a type in a declaration. The compiler assumed the storage class specifier occurred before the type. New-style code places the storage-class specifier first. %@AB@%C4129%@AE@% %@AB@%'%@AE@%%@AI@%character%@AE@%%@AB@%' : unrecognized character %@AE@% %@AB@%escape sequence%@AE@% The character following a backslash in a character or string constant was not recognized as a valid escape sequence. As a result, the backslash is ignored and not printed, and the character following the backslash is printed. To print a single backslash ( \ ), specify a double backslash ( \\ ). %@AB@%C4130%@AE@% %@AB@%'%@AE@%%@AI@%operator%@AE@%%@AB@%' : logical operation on %@AE@% %@AB@%address of string constant%@AE@% The operator was used with the address of a string literal. Unexpected code was generated. For example, the following code causes this warning: %@AS@%char *pc;%@AE@% %@AS@%pc = "Hello";%@AE@% %@AS@%if (pc == "Hello") ...%@AE@% The if statement compares the value stored in the pointer pc to the address of the string %@AS@% "Hello"%@AE@%, which is separately allocated each time it occurs in the code. It does not compare the string pointed to by %@AS@%pc%@AE@% with the string %@AS@%%@AE@% %@AS@%"Hello"%@AE@%. To compare strings, use the strcmp function. %@AB@%C4131%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : uses old-style declarator%@AE@% The function declaration or definition is not a prototype. New-style function declarations are in prototype form. ■ old style %@AS@%int addrec( name, id )%@AE@% %@AS@%char *name;%@AE@% %@AS@%int id;%@AE@% %@AS@%{ }%@AE@% ■ new style %@AS@%int addrec( char *name, int id )%@AE@% %@AS@%{ }%@AE@% %@AB@%C4132%@AE@% %@AB@%'%@AE@%%@AI@%object%@AE@%%@AB@%' : const object should be %@AE@% %@AB@%initialized%@AE@% The value of a %@AB@%const%@AE@% object cannot be changed, so the only way to give the %@AB@%%@AE@% %@AB@%const%@AE@% object a value is to initialize it. It will not be possible to assign a value to %@AI@%object%@AE@%. %@AB@%C4135%@AE@% %@AB@%conversion between different integral %@AE@% %@AB@%types%@AE@% Information was lost between two integral types. For example, the following code causes this warning: %@AS@%int intvar;%@AE@% %@AS@%long longvar;%@AE@% %@AS@%intvar = longvar;%@AE@% If the information is merely interpreted differently, this warning is not given, as in the following example: %@AS@%unsigned uintvar = intvar;%@AE@% %@AB@%C4136%@AE@% %@AB@%conversion between different floating %@AE@% %@AB@%types%@AE@% Information was lost or truncated between two floating types. For example, the following code causes this warning: %@AS@%double doublevar;%@AE@% %@AS@%float floatvar;%@AE@% %@AS@%floatvar = doublevar;%@AE@% Note that unsuffixed floating-point constants have type double, so the following code causes this warning: %@AS@%floatvar = 1.0;%@AE@% If the floating-point constant should be treated as float type, use the %@AS@%F%@AE@% (or %@AS@%f%@AE@%) suffix on the constant to prevent the following warning: %@AS@%floatvar = 1.0F;%@AE@% %@AB@%C4137%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : no return value from %@AE@% %@AB@%floating-point function%@AE@% The given function had no return statement. A long double function returns its value on the floating-point stack or the emulated stack. If the function does not return a value, a run-time floating-point stack underflow may occur. %@AB@%C4138%@AE@% %@AB@%'*/' found outside of comment%@AE@% The compiler found a closing comment delimiter (*/) without a preceding opening delimiter. It assumed a space between the asterisk (*) and the forward slash ( / ). The following example causes this warning: %@AS@%int */*comment*/ptr;%@AE@% In this example, the compiler assumed a space before the first comment delimiter ( /* ), and issued the warning but compiled the line normally. To remove the warning, insert the assumed space. Usually, the cause of this warning is an attempt to nest comments. To comment out sections of code that may contain comments, enclose the code in an %@AB@%#if%@AE@%/%@AB@%#endif%@AE@% block and set the controlling expression to zero, as in: %@AS@%#if 0%@AE@% %@AS@%int my_variable; /* Declaration %@AE@% %@AS@%currently not needed */%@AE@% %@AS@%#endif%@AE@% %@AB@%C4139%@AE@% %@AB@%'%@AE@%%@AI@%hexnumber%@AE@%%@AB@%' : hex escape sequence is out%@AE@% %@AB@%of range%@AE@% A hex escape sequence appearing in a character or string constant was too large to be converted to a character. If in a string constant, the compiler cast the low byte of the hexadecimal number to a %@AB@%char%@AE@%. If in a %@AB@%char%@AE@% constant, the compiler made the cast and then sign extended the result. If in a %@AB@%char%@AE@% constant and compiled with /J, the compiler cast the value to an unsigned %@AB@%%@AE@% %@AB@%char%@AE@%. For example, ' \\ x1ff ' is out of range for a character. Note that the following code causes this warning: %@AS@%printf("\\x7Bell\\n");%@AE@% The number %@AS@% 7be %@AE@% is a legal hex number, but is too large for a character. To correct this example, use three hex digits: %@AS@%printf("\\x007Bell\\n");%@AE@% %@AB@%C4140%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' redefined : preceding %@AE@% %@AB@%references may be invalid%@AE@% The compiler issues this warning if a function definition changes between incremental compilations. References previous to the redefinition use the previous definition. Subsequent references use the new definition. For example: %@AS@%main()%@AE@% %@AS@%{%@AE@% %@AS@%func1 ();%@AE@% %@AS@%}%@AE@% %@AS@%int func1 ()%@AE@% %@AS@%{ }%@AE@% If this program is compiled with the /Gi option, and later the %@AS@% func1 %@AE@% definition is changed to %@AS@% long func1%@AE@%, the compiler issues this message to warn that calls to %@AS@% func1 %@AE@% may be of the wrong type. Be sure that function calls reference the correct type; if not, recompile without /Gi. To avoid the problem altogether, use function prototypes. %@AB@%C4185%@AE@% %@AB@%near call to '%@AE@%%@AI@%function%@AE@%%@AB@%' in different %@AE@% %@AB@%segment%@AE@% The given function was specified in an %@AB@%%@AE@% %@AB@%alloc_text%@AE@% pragma without being declared with %@AB@%_far%@AE@%, and then was called from text segment. The compiler generated a near call. Although this is a warning message rather than an error message, the resulting code will not work correctly. %@AB@%C4186%@AE@% %@AB@%string too long - truncated to 40 %@AE@% %@AB@%characters%@AE@% The string argument for a title or subtitle pragma exceeded the maximum allow-able length and was truncated. %@AB@%C4200%@AE@% %@AB@%local variable '%@AE@%%@AI@%identifier%@AE@%%@AB@%' used without%@AE@% %@AB@%having been initialized%@AE@% A reference was made to a local variable that had not been assigned a value. As a result, the value of the variable is unpredictable. This warning is given only when compiling with global register allocation on (/Oe). %@AB@%C4201%@AE@% %@AB@%local variable '%@AE@%%@AI@%identifier%@AE@%%@AB@%' may be used %@AE@% %@AB@%without having been initialized%@AE@% A reference was made to a local variable that might not have been assigned a value. As a result, the value of the variable may be unpredictable. This warning is given only when compiling with the global register allocation on (/Oe). %@AB@%C4202%@AE@% %@AB@%unreachable code%@AE@% The flow of control can never reach the indicated line. This warning is given only when compiling with one of the global optimizations (/Oe, /Og, or /Ol). %@AB@%C4203%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : function too large for %@AE@% %@AB@%global optimizations%@AE@% The named function was too large to fit in memory and be compiled with the selected optimization. The compiler did not perform any global optimiza- tions (/Oe, /Og, or /Ol). Other /O optimizations, such as /Oa and /Oi, are still performed. One of the following may remove this warning: ■ Recompile with fewer optimizations. ■ Divide the function into two or more smaller functions. %@AB@%C4204%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : in-line assembler precludes%@AE@% %@AB@%global optimizations%@AE@% The use of in-line assembler in the named function prevented the specified global optimizations (/Oe, /Og, or /Ol) from being performed. %@AB@%C4205%@AE@% %@AB@%statement has no effect%@AE@% The indicated statement will have no effect on the program execution. The following are examples of statements with no effect: %@AS@%1;%@AE@% %@AS@%a + 1%@AE@% %@AS@%; b == c;%@AE@% %@AB@%C4206%@AE@% %@AB@%assignment within conditional expression%@AE@% The test value in a conditional expression was the result of an assignment. This warning is informational. An assignment has a value (the value at the left side of the assignment) that can be used legally in another expression, including a test expression. However, the intention may have been to test a relation instead of an assignment. For example, the following line, which causes this warning, assigns %@AS@% b %@AE@% to %@AS@% a %@AE@% and compares the value of %@AS@% a %@AE@% with 0: %@AS@%if (a = b) ...%@AE@% However, the following line tests whether %@AS@% a %@AE@% and %@AS@% b %@AE@% are equal: %@AS@%if (a == b) ...%@AE@% %@AB@%C4209%@AE@% %@AB@%comma operator within array index %@AE@% %@AB@%expression%@AE@% The value used as an index into an array was the last one of multiple expressions separated by the comma operator. It is legal for an array index to be the value of the last expression in a series of expressions separated by the comma operator. However, the intent may have been to use the expressions to specify multiple indexes into a multidimensional array. For example, the following line, which causes this warning, is legal in C, and specifies the index %@AS@% c %@AE@% into array %@AS@% a: %@AE@% %@AS@%a[b,c]%@AE@% However, the following line uses both %@AS@% b%@AE@% %@AS@%%@AE@% and %@AS@% c %@AE@% as indexes into a two- dimensional array: %@AS@%a[b][c]%@AE@% %@AB@%C4300%@AE@% %@AB@%insufficient memory to process debugging%@AE@% %@AB@%information%@AE@% The program was compiled with the /Zi option, but not enough memory was available to create the required debugging information. One of the following may be a solution: ■ Split the current file into two or more files and compile them separately. ■ Remove other programs or drivers running in the system which could be consuming significant amounts of memory. %@AB@%C4301%@AE@% %@AB@%loss of debugging information caused by %@AE@% %@AB@%optimization%@AE@% Some optimizations, such as code motion, cause references to nested variables to be moved. The information about the level at which the variables are declared may be lost. As a result, all declarations will seem to be at nesting level 1. %@AB@%C4323%@AE@% %@AB@%potential divide by 0%@AE@% The second operand in a divide operation evaluated to zero at compile time, giving undefined results. The 0 operand may have been generated by the compiler, as in the following example: %@AS@%func1() { int i,j,k; i /= j && k; }%@AE@% %@AB@%C4324%@AE@% %@AB@%potential mod by 0%@AE@% The second operand in a remainder operation evaluated to zero at compile time, giving undefined results. %@AB@%C4414%@AE@% %@AB@%'%@AE@%%@AI@%function%@AE@%%@AB@%' : short jump to function %@AE@% %@AB@%converted to near%@AE@% Short jumps generate a one-byte instruction. The instruction includes a short offset that represents the distance between the jump and the function definition. The compiler must generate a special record for the jump, which requires the jump to be either %@AB@%%@AE@% %@AB@%NEAR%@AE@% or %@AB@%FAR%@AE@%, but not %@AB@%SHORT%@AE@%. The compiler made the conversion. For example, the following code causes this warning: %@AS@%main()%@AE@% %@AS@%{%@AE@% %@AS@% _asm jmp SHORT main%@AE@% %@AS@%}%@AE@% %@NL@% %@2@%%@CR:C6A00050015 @%%@AB@%5.2 Command-Line Error Messages%@AE@%%@EH@%%@NL@% %@NL@% Messages that indicate errors on the command line used to invoke the compiler have one of the following formats:%@CR:C6A00050016 @%%@CR:C6A00050017 @%%@CR:C6A00050018 @% %@NL@% %@NL@% %@AS@% command line error D2xxx: messagetext Error %@AS@% command line warning D4xxx: messagetext Warning%@AE@%%@NL@% %@NL@% The compiler issues a warning message and, if possible, continues processing. In some cases, command-line errors are fatal and the compiler terminates processing. %@NL@% %@NL@% When the QCL compiler encounters any of the errors listed in this section, it terminates, producing no object file. %@NL@% %@NL@% %@AB@%Number %@AE@% %@AB@%Command-Line Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%D2013%@AE@% %@AB@%incomplete model specification%@AE@% A customized memory model was incompletely specified with the /A%@AI@%string%@AE@% option. Two types of options begin with /A: ■ The /A%@AI@%string%@AE@% customized memory-model option requires three letters in the string. The letters specify the code-pointer size, data-pointer size, and data-segment setup attributes of the memory model. ■ The /A%@AI@%x%@AE@% option for specifying a standard memory model requires one uppercase letter. A lowercase letter is interpreted to be part of a customized memory-model specification. For example: %@AS@%qcl /As%@AE@% %@STUB@% A single lowercase letter can be used only if it is a segment setup option and is used in combination with a standard memory model.%@NL@% %@NL@% %@AB@%D2030%@AE@% %@AB@%INTERNAL COMPILER ERROR in '%@AE@%%@AI@%component%@AE@%%@AB@%' %@AE@% %@AB@%Contact Microsoft Product Support %@AE@% %@AB@%Services%@AE@% The driver detects an error in the specified component, which could be P1, P2, P3, MASM, LINK, or BIND. Note the circumstances of the error and notify Microsoft Corporation by following the instructions in the Microsoft Product Assistance Request form at the back of one of your manuals. %@AB@%D2031%@AE@% %@AB@%too many flags/files on command line%@AE@% There are more than 128 arguments combined from the command line and the CL environment variable. Reduce the number of arguments. You can do this by compiling fewer files at one time. %@NL@% %@2@%%@CR:C6A00050019 @%%@AB@%5.3 Run-Time Error Message%@AE@%%@EH@%%@NL@% %@NL@% The following message may be generated at run time. %@NL@% %@NL@% A run-time error message takes the following general form: %@NL@% %@NL@% %@AI@%run-time error%@AE@% R6%@AI@%nnn%@AE@%- %@AI@%messagetext%@AE@% %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Run-Time Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%R6010%@AE@% %@AB@%abnormal program termination%@AE@% This error is displayed by the abort( ) routine. The program terminates with exit code 3, unless an abort( ) signal handler has been defined by using the signal( ) function. %@NL@% %@2@%%@CR:C6A00050020 @%%@AB@%5.4 QLINK Error Messages%@AE@%%@EH@%%@NL@% %@NL@% This section lists error messages generated by the QuickC linker (QLINK) and the special incremental linker (ILINK) that is invoked when you compile QuickC programs with the /Gi or /Li option. Note that in most cases, QuickC will invoke QLINK if ILINK fails.%@CR:C6A00050021 @%%@CR:C6A00050022 @% %@NL@% %@NL@% Fatal errors, which cause the linker to stop execution, have the following format: %@NL@% %@NL@% %@AS@% location : error L1 xxx : messagetext%@AE@%%@NL@% %@NL@% Nonfatal errors, which indicate problems in the executable file, do not cause QLINK to stop execution; QLINK produces the executable file. Nonfatal error messages have the following format: %@NL@% %@NL@% %@AS@% location : error L2 xxx : messagetext %@AE@%%@NL@% %@NL@% Warnings indicate possible problems in the executable file. QLINK produces the executable file. Warnings have the following format: %@NL@% %@NL@% %@AS@% location : warning L4 xxx : messagetext %@AE@%%@NL@% %@NL@% In all three kinds of messages, %@AI@%location%@AE@% is the input file associated with the error, or %@AS@% QLINK %@AE@% if there is no input file. If the input file is an .OBJ or .LIB file and a module name is associated with the error, the module name is enclosed in paren-theses, as shown in the following examples: %@NL@% %@NL@% %@AS@% SLIBC.LIB(_file) %@AS@% MAIN.OBJ(main.c) %@AS@% TEXT.OBJ%@AE@%%@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00050023 @%%@AB@%5.4.1 Fatal-Error Messages%@AE@%%@EH@%%@NL@% %@NL@% The following error messages may appear when you link object files: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Run-Time Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%L1030%@AE@% %@AB@%missing internal name%@AE@% An IMPORTS statement specified an ordinal in the module-definition file without including the internal name of the routine. The name must be given if the import is by ordinal. %@AB@%L1031%@AE@% %@AB@%module description redefined%@AE@% A DESCRIPTION statement in the module-definition file was specified more than once. %@AB@%L1032%@AE@% %@AB@%module name redefined%@AE@% The module name was specified more than once (in a NAME or LIBRARY statement). %@AB@%L1040%@AE@% %@AB@%too many exported entries%@AE@% The program exceeded the limit of 65,535 exported names. %@AB@%L1041%@AE@% %@AB@%resident-name table overflow%@AE@% The size of the resident-name table exceeds 65,535 bytes. An entry in the resident-name table is made for each exported routine designated RESIDENTNAME, and consists of the name plus three bytes of information. The first entry is the module name. Reduce the number of exported routines or change some to nonresident status. %@AB@%L1042%@AE@% %@AB@%nonresident-name table overflow%@AE@% The size of the nonresident-name table exceeds 65,535 bytes. An entry in the nonresident-name table is made for each exported routine not designated RESIDENTNAME, and consists of the name plus three bytes of information. The first entry is the DESCRIPTION statement. Reduce the number of exported routines or change some to resident status. %@AB@%L1044%@AE@% %@AB@%imported-name table overflow%@AE@% The size of the imported-names table exceeds 65,535 bytes. An entry in the imported-names table is made for each new name given in the IMPORTS section, including the module names, and consists of the name plus one byte. Reduce the number of imports. %@AB@%L1064%@AE@% %@AB@%out of memory%@AE@% The linker was not able to allocate enough memory from the operating system to link the program. Reduce the size of the program in terms of code, data, and symbols. %@AB@%L1078%@AE@% %@AB@%file-segment alignment too small%@AE@% The segment-alignment size given with the /ALIGNMENT:%@AI@%number%@AE@% option was too small. Try increasing the number. %@AB@%L1092%@AE@% %@AB@%cannot open module-definition file%@AE@% The linker could not open the module-definition file specified on the command line or in the response file. %@AB@%L1115%@AE@% %@AB@%'%@AE@%%@AI@%option%@AE@%%@AB@%' : option incompatible with %@AE@% %@AB@%overlays%@AE@% The given option is not compatible with overlays. Remove the option or else do not use overlaid modules. %@NL@% %@3@%%@CR:C6A00050024 @%%@AB@%5.4.2 Nonfatal-Error Messages%@AE@%%@EH@%%@NL@% %@NL@% The following nonfatal-error messages may appear when you link object files: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%L2000%@AE@% %@AB@%imported starting address%@AE@% The program starting address as specified in the END statement in a MASM file is an imported routine. %@AB@%L2022%@AE@% %@AB@%'%@AE@%%@AI@%routine%@AE@%%@AB@%' (alias '%@AE@%%@AI@%internalname%@AE@%%@AB@%') : %@AE@% %@AB@%export undefined%@AE@% The internal name of the given exported routine is undefined. %@AB@%L2023%@AE@% %@AB@%'%@AE@%%@AI@%routine%@AE@%%@AB@%' (alias '%@AE@%%@AI@%internalname%@AE@%%@AB@%') : %@AE@% %@AB@%export imported%@AE@% The internal name of the given exported routine conflicts with the internal name of a previously imported routine. The set of imported and exported names cannot overlap. %@AB@%L2026%@AE@% %@AB@%entry ordinal '%@AE@%%@AI@%number%@AE@%%@AB@%', name '%@AE@%%@AI@%name%@AE@%%@AB@%' : %@AE@% %@AB@%multiple definitions for same ordinal%@AE@% The given exported name with the given ordinal number conflicted with a different exported name previously assigned to the same ordinal. Only one name can be associated with a particular ordinal. %@AB@%L2027%@AE@% %@AB@%'%@AE@%%@AI@%name%@AE@%%@AB@%' : ordinal too large for export%@AE@% The given exported name was assigned an ordinal that exceeded the limit of 65,535. %@AB@%L2028%@AE@% %@AB@%automatic data segment plus heap exceed %@AE@% %@AB@%64K%@AE@% The total size of data declared in DGROUP, plus the value given in HEAPSIZE in the module-definition file, plus the stack size given by the /STACK option or STACKSIZE module-definition file statement, exceeds 64K. Reduce near-data allocation, HEAPSIZE, or stack. %@AB@%L2049%@AE@% %@AB@%no segments defined%@AE@% No code or initialized data was defined in the program. The resulting executable file is not likely to be valid. %@AB@%L2050%@AE@% %@AB@%16/32 bit attribute conflict - segment: %@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' in group: '%@AE@%%@AI@%group%@AE@%%@AB@%'%@AE@% 16-bit segments cannot be grouped with 32-bit segments. %@AB@%L2051%@AE@% %@AB@%start address not equal to 0x100 for %@AE@% %@AB@%/TINY%@AE@% The program starting address, as specified in the .COM file, must have a starting value equal to 100 hex (0x100 or 0x0100). Any other value is illegal. Put the following line of assembly source code in front of the code segment: %@AS@%ORG 100h%@AE@% %@AB@%L2052%@AE@% %@AB@%'%@AE@%%@AI@%symbol%@AE@%%@AB@%' : unresolved external - %@AE@% %@AB@%possible calling convention mismatch%@AE@% A symbol was declared to be external in one or more modules, but the linker could not find it publicly defined in any module or library. The name of the unresolved external symbol is given, then a list of object modules which contain references to this symbol is given. The error message and the list are written to the map file, if one exists. This error occurs when a prototype for an externally defined function is omitted from a program that is compiled with the Fastcall option (/Ox). The calling convention for fastcall does not match the assumptions that are made when a prototype is not included for an external function. Either include a prototype for the function, or compile without the /Ox option. %@NL@% %@3@%%@CR:C6A00050025 @%%@AB@%5.4.3 Warning Messages%@AE@%%@EH@%%@NL@% %@NL@% The following warning messages may appear when you link object files: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Warning Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%L4004%@AE@% %@AB@%possible fixup overflow at '%@AE@%%@AI@%offset%@AE@%%@AB@%' in %@AE@% %@AB@%segment '%@AE@%%@AI@%segment%@AE@%%@AB@%'%@AE@% A near call/jump was made to another segment which was not a member of the same group as the segment from which the call/jump was made. This call/jump can cause an incorrect address calculation when the distance between the paragraph address (frame number) of the segment group and the target segment is greater than 64K, even when the distance between the segment where the call/jump was actually made and the target segment is less than 64K. %@AB@%L4017%@AE@% %@AB@%'%@AE@%%@AI@%option%@AE@%%@AB@%' : unrecognized option name; %@AE@% %@AB@%option ignored%@AE@% An unrecognized character followed the option indicator (/). An example of this warning is %@AS@%QLINK /ABCDEF main;%@AE@% %@AB@%L4019%@AE@% %@AB@%/TINY disables /INCREMENTAL%@AE@% A .COM file always requires a full link and cannot be incrementally linked. The /TINY and /INCREMENTAL options are incompatible. When they are used together, the linker ignores /INCREMENTAL. %@AB@%L4023%@AE@% %@AB@%'%@AE@%%@AI@%routine%@AE@%%@AB@%' ('%@AE@%%@AI@%internalname%@AE@%%@AB@%') : export %@AE@% %@AB@%internal name conflict%@AE@% The internal name of the given exported routine conflicted with the internal name of a previous import definition or export definition. %@AB@%L4024%@AE@% %@AB@%'%@AE@%%@AI@%name%@AE@%%@AB@%' : multiple definitions for export%@AE@% %@AB@%name%@AE@% The given name was exported more than once, an action that is not allowed. %@AB@%L4025%@AE@% %@AB@%'%@AE@%%@AI@%modulename%@AE@%%@AB@%'.'%@AE@%%@AI@%importname%@AE@%%@AB@%'('%@AE@%%@AI@%internalname%@AE@%%@AB@%')%@AE@% %@AB@%: import internal name conflict%@AE@% The internal name of the given imported routine (import is either a name or a number) conflicted with the internal name of a previous export or import. %@AB@%L4026%@AE@% %@AB@%'%@AE@%%@AI@%modulename%@AE@%%@AB@%'.'%@AE@%%@AI@%importname%@AE@%%@AB@%'('%@AE@%%@AI@%internalname%@AE@%%@AB@%')%@AE@% %@AB@%: self-imported%@AE@% The given imported routine was imported from the module being linked. This is not supported on some systems. %@AB@%L4027%@AE@% %@AB@%'%@AE@%%@AI@%name%@AE@%%@AB@%' : multiple definitions for import%@AE@% %@AB@%internal name%@AE@% The given internal name was imported more than once. Previous import definitions are ignored. %@AB@%L4028%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : segment already defined%@AE@% The given segment was defined more than once in the SEGMENTS statement of the module-definition file. %@AB@%L4030%@AE@% %@AB@%'%@AE@%%@AI@%segment%@AE@%%@AB@%' : segment attributes changed %@AE@% %@AB@%to conform with automatic data segment%@AE@% The given logical segment in the group DGROUP was given sharing attributes (SHARED/NONSHARED) that differed from the automatic data attributes as declared by the DATA instance specification (SINGLE/MULTIPLE). The attri-butes are converted to conform to those of DGROUP. The name DGROUP is predefined as the automatic data segment. DGROUP cannot contain code segments because the linker always considers DGROUP to be a data segment. %@AB@%L4040%@AE@% %@AB@%stack size ignored for /TINY%@AE@% The linker ignores stack size if /TINY is given and if the stack segment has been defined in front of the code segment. %@AB@%L4042%@AE@% %@AB@%cannot open old version%@AE@% The file specified in the OLD statement in the module-definition file could not be opened. %@AB@%L4045%@AE@% %@AB@%name of output file is '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% The linker had to change the name of the output file to the given file name. If the output file is specified without an extension, the linker assumes the default extension .EXE. Creating a Quick library, .DLL file, or .COM file forces the linker to use an extension other than .EXE: %@AB@%Output File Specification%@AE@% %@AB@%Extension%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% /TINY option .COM /QUICKLIB option .QLB LIBRARY statement in .DEF file .DLL %@AB@%L4047%@AE@% %@AB@%Multiple code segments in module of %@AE@% %@AB@%overlaid program incompatible with %@AE@% %@AB@%/CODEVIEW%@AE@% When debugging with CodeView, if there are multiple code segments defined in one module (.OBJ file) by use of the compiler %@AB@%#pragma alloc_text()%@AE@% and the program is built as an overlaid program, you can access the symbolic information for only the first code segment in overlay. Symbolic information for the rest of the code segments in overlay is not accessible. %@NL@% %@2@%%@CR:C6A00050026 @%%@AB@%5.5 NMAKE Error Messages%@AE@%%@EH@%%@NL@% %@NL@% Error messages from the NMAKE utility have one of the following formats:%@CR:C6A00050027 @%%@CR:C6A00050028 @% %@NL@% %@NL@% %@AS@% {filename | NMAKE} : fatal error U1 xxx: messagetext %@AS@% {filename | NMAKE} : warning U4 xxx: messagetext%@AE@%%@NL@% %@NL@% The message begins with the input-file name (%@AI@%filename%@AE@%) and line number, if one exists, or with the name of the utility. %@NL@% %@NL@% %@NL@% %@3@%%@CR:C6A00050029 @%%@AB@%5.5.1 Fatal-Error Messages%@AE@%%@EH@%%@NL@% %@NL@% NMAKE generates the following error messages: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Error message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%U1006%@AE@% %@AB@%syntax: missing closing double quotation%@AE@% %@AB@%mark%@AE@% An opening double quotation mark (") appeared without a closing double quotation mark. %@AB@%U1007%@AE@% %@AB@%double quotation mark not allowed in %@AE@% %@AB@%name%@AE@% The specified target name or file name contained a double quotation mark ("). Double quotation marks can surround a file name but not be contained within it. %@AB@%U1045%@AE@% %@AB@%'internal error message'%@AE@% Note the circumstances of the error and notify Microsoft Corporation by following the instructions in the Microsoft Product Assistance Request form at the back of one of your manuals. %@AB@%U1051%@AE@% %@AB@%out of memory%@AE@% The program ran out of space in the far heap. Split the description file into smaller and simpler pieces. %@AB@%U1052%@AE@% %@AB@%file '%@AE@%%@AI@%filename%@AE@%%@AB@%' not found%@AE@% The file was not found. The file name may not be properly specified in the makefile. %@AB@%U1053%@AE@% %@AB@%file '%@AE@%%@AI@%filename%@AE@%%@AB@%' unreadable%@AE@% The file cannot be read. The following are possible causes of this error: ■ The file does not have appropriate attributes for reading. ■ A bad area exists on disk. ■ A bad file-allocation table exists. ■ The file is locked. %@AB@%U1054%@AE@% %@AB@%cannot create in-line file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% NMAKE failed in its attempt to create the file given by name.%@AI@% %@AE@% The following are possible causes of this error: ■ The file already exists with a read-only attribute. ■ There is insufficient disk space to create the file. %@AB@%U1055%@AE@% %@AB@%out of environment space%@AE@% The environment space limit was reached. Restart the program with a larger environment space or with fewer environment variables. %@AB@%U1056%@AE@% %@AB@%cannot find command processor%@AE@% The command processor was not found. NMAKE uses COMMAND.COM or CMD.EXE as a command processor to execute commands. It looks for the command processor first by the full path name given by the COMSPEC environment variable. If COMSPEC does not exist, NMAKE searches the directories specified by the PATH environment variable. %@AB@%U1057%@AE@% %@AB@%cannot delete temporary file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% NMAKE failed to delete the temporary in-line file. %@AB@%U1058%@AE@% %@AB@%terminated by user%@AE@% Execution of NMAKE was aborted by CTRL+C or CTRL+BREAK. %@AB@%U1060%@AE@% %@AB@%unable to close file : '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% NMAKE encountered an error while closing a file. One of the following may have occurred: ■ The file is a read-only file. ■ There is a locking or sharing violation. ■ The disk is full. %@AB@%U1061%@AE@% %@AB@%/F option requires a file name%@AE@% The /F command-line option requires the name of the description file to be specified. To use standard input, specify '-' as the description file name. %@AB@%U1062%@AE@% %@AB@%missing file name with /X option%@AE@% The /X command-line option requires the name of the file to which diagnostic error output should be redirected. To use standard input, specify '-' as the output file name. %@AB@%U1063%@AE@% %@AB@%missing macro name before '='%@AE@% NMAKE detected an equal sign (=) without a preceding name. This error can occur in a recursive call when the macro corresponding to the macro name expands to nothing. %@AB@%U1064%@AE@% %@AB@%MAKEFILE not found and no target %@AE@% %@AB@%specified%@AE@% No description file was found, and no target was specified. A description file can be specified either with the /F option or through the default file MAKEFILE. Note that NMAKE can create a target using an inference rule even if no description file is specified. %@AB@%U1065%@AE@% %@AB@%invalid option '%@AE@%%@AI@%option%@AE@%%@AB@%'%@AE@% The option specified is not a valid option for NMAKE. %@AB@%U1066%@AE@% %@AB@%option '/N' not supported; use NMAKE%@AE@% NMAKE's shell program NMK.COM does not support the /N option. Use NMAKE /N. %@AB@%U1083%@AE@% %@AB@%target macro '$(macroname)' expands to %@AE@% %@AB@%nothing%@AE@% A target was specified as a macro name that has not been defined or has null value. NMAKE cannot process a null target. %@AB@%U1084%@AE@% %@AB@%in-line file not allowed in inference %@AE@% %@AB@%rules%@AE@% In-line file syntax is not allowed in inference rules and can be used only in a target-dependency block. %@AB@%U1094%@AE@% %@AB@%syntax error : only (no)keep allowed %@AE@% %@AB@%here%@AE@% Something other than KEEP or NOKEEP appeared at the end of the syntax for creating an in-line file. The syntax for generating an in-line file allows an action to be specified after the second pair of angle brackets. Valid actions are KEEP and NOKEEP. Other actions are errors. The KEEP option specifies that NMAKE should leave the in-line file on disk. The NOKEEP option causes NMAKE to delete the file before exiting. The default is NOKEEP. %@AB@%U1095%@AE@% %@AB@%expanded command line '%@AE@%%@AI@%commandline%@AE@%%@AB@%' too %@AE@% %@AB@%long%@AE@% After macro expansion, the command line shown exceeded the length limit for command lines for the operating system. DOS permits up to 128 characters on a command line. If the command is a QLINK command line, use a response file. %@AB@%U1096%@AE@% %@AB@%cannot open file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% The given file could not be opened, either because the disk was full or because the file has been set to be read-only. %@AB@%U1097%@AE@% %@AB@%extmake syntax usage error, no dependent%@AE@% No dependent was given. In extmake syntax, the target under consideration must have either an implicit dependent or an explicit dependent. %@AB@%U1098%@AE@% %@AB@%extmake syntax in '%@AE@%%@AI@%string%@AE@%%@AB@%' incorrect%@AE@% The part of the string shown contains an extmake syntax error. %@NL@% %@3@%%@CR:C6A00050030 @%%@AB@%5.5.2 Compilation-Error Message%@AE@%%@EH@%%@NL@% %@NL@% NMAKE generates the following compilation-error messages: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Compilation-Error Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%U2001%@AE@% %@AB@%no more file handles (too many files %@AE@% %@AB@%open)%@AE@% NMAKE could not find a free file handle. One of the following may be a solution: ■ Reduce recursion in the build procedures. ■ Increase the number of file handles by changing the FILES setting in CONFIG.SYS to allow a larger number of open files. FILES =20 is the recommended setting. %@NL@% %@3@%%@CR:C6A00050031 @%%@AB@%5.5.3 Warning Messages%@AE@%%@EH@%%@NL@% %@NL@% NMAKE generates the following warning messages: %@NL@% %@NL@% %@AB@%Number%@AE@% %@AB@%Warning Message%@AE@% %@AB@%────────────────────────────────────────────────────────────────────────────%@AE@%%@NL@% %@AB@%U4001%@AE@% %@AB@%command file can be invoked only from %@AE@% %@AB@%command line%@AE@% A command file cannot be invoked from within another command file. Such an invocation is ignored. The command file should contain the entire remaining command line. %@AB@%U4002%@AE@% %@AB@%resetting value of special macro '%@AE@%%@AI@%%@AE@% %@AI@%macroname%@AE@%%@AB@%'%@AE@% The value of a macro such as $(MAKE) was changed within a description file. The name by which this program was invoked is not a tagged section in the TOOLS.INI file. %@AB@%U4003%@AE@% %@AB@%no match found for wild card '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% There are no file names that match the specified target or dependent file with the wild-card characters asterisk (*) and question mark (?). %@AB@%U4004%@AE@% %@AB@%too many rules for target '%@AE@%%@AI@%targetname%@AE@%%@AB@%'%@AE@% Multiple blocks of build commands were specified for a target using single colons (:) as separators. %@AB@%U4005%@AE@% %@AB@%ignoring rule '%@AE@%%@AI@%rule%@AE@%%@AB@%' (extension not in %@AE@% %@AB@%.SUFFIXES)%@AE@% The rule was ignored because the suffix(es) in the rule are not listed in the .SUFFIXES list. %@AB@%U4006%@AE@% %@AB@%special macro undefined : '%@AE@%%@AI@%macroname%@AE@%%@AB@%'%@AE@% The special macro name is undefined and expands to nothing. %@AB@%U4007%@AE@% %@AB@%file name '%@AE@%%@AI@%filename%@AE@%%@AB@%' too long; %@AE@% %@AB@%truncating to 8.3%@AE@% The base name of the file has more than eight characters, or the extension has more than three characters. NMAKE truncates the name to an eight-character base and a three-character extension. %@AB@%U4008%@AE@% %@AB@%removed target '%@AE@%%@AI@%target%@AE@%%@AB@%'%@AE@% Execution of NMAKE was interrupted while NMAKE was trying to build the given target, and therefore the target was incomplete. Because the target was not specified in the .PRECIOUS list, NMAKE has deleted it. %@AB@%U4009%@AE@% %@AB@%duplicate in-line file '%@AE@%%@AI@%filename%@AE@%%@AB@%'%@AE@% The given file name is the same as the name of an earlier in-line file. Reuse of this name caused the earlier file to be overwritten. This will probably cause unexpected results. %@NL@% %@NL@%