DEC C
User's Guide for OpenVMS Systems


Previous Contents Index

C.3.5 LSE Examples

The following examples show the expansions of DEC C tokens and placeholders. The intent is to show the formats and guidelines that LSE provides, not to fully expand all tokens and placeholders. An arrow (->) indicates where in the example an action occurred.

To invoke LSE and the DEC C language, use the following syntax:

LSEDIT [/qualifier...] filename.C

C.3.5.1 Compilation Unit

When you use the editor to create a new DEC C program, the initial string {@compilation unit@} appears at the top of the screen:


->      {@compilation unit@} 
        [End of file] 

Use Ctrl/E to expand this initial string. The following is displayed:


->      [@#module@] 
        [@module level comments@] 
        [@include files@] 
        [@macro definitions@] 
 
        [@preprocessor directive@]... 
 
        [@data type or declaration@]...; 
 
        [@function definition@]...; 

C.3.5.2 Preprocessor Lines

Erase the [@#module@] , [@module level comments@] , [@include files@] , and [@macro definitions@] . The cursor is then positioned on [@preprocessor directive@] . Expand [@preprocessor directive@] to duplicate it and display a menu. Then select the #include option:

  1. Use the up and down arrows on the keypad to position the displayed selection arrow next to #include .
  2. Press Return.

The following display results:


->      #include 
        [@preprocessor directive@]... 
 
        [@data type or declaration@]...; 
 
        [@function definition@]...; 

After selecting the #include option, another menu appears that lists the types of #include statements. Select the option #include {@module name@} . Your display now looks like this:


->      #include {@module name@} 
        [@preprocessor directive@]... 
 
        [@data type or declaration@]...; 
 
        [@function definition@]...; 

Type the value stdio over the placeholder {@module name@} .

Experiment with the LSE editor to expand other placeholders, such as [@data type or declaration@] , [@function definition@] , and so on.

C.4 CDD/Repository

CDD/Repository is an optional OpenVMS software product available under a separate license. The CDD/Repository product allows you to maintain shareable data definitions (language-independent structure declarations) that are defined by a data or repository administrator.

Note

CDD/Repository supports both the Common Data Dictionary (Version 3) and CDD/Plus (Version 4) interfaces. Older dictionary versions need to be converted to repository (CDD/Repository) format using a supplied conversion utility. For detailed information about CDD/Repository, see the CDD/Repository documentation.

C.4.1 Using CDD/Repository

CDD/Repository data definitions are organized hierarchically in the same way files are organized in directories and subdirectories. For example, a repository for defining personnel data might have separate directories for each employee type.

Descriptions of data definitions are entered into the dictionary in a special-purpose language called CDO (Common Dictionary Operator, which replaces the older interface called CDDL, Common Data Dictionary Language). CDD/Repository converts the data descriptions to an internal form---making them independent of the language used to access them---and inserts them into the repository.

To extract data definitions from CDD/Repository, include the #pragma dictionary preprocessor directive in your DEC C source program. If the data attributes of the data definitions are consistent with DEC C requirements, the data definitions are included in the DEC C program during compilation. See Section 5.4.2 for information about using #pragma dictionary .

CDD/Repository data definitions, in the form of DEC C source code, appear in source program listings if you specify the /SHOW=DICTIONARY qualifier on the CC command line.

The advantage in using CDD/Repository instead of DEC C source for structure declarations is that CDD/Repository record declarations are language-independent and can be used with several supported OpenVMS languages.

C.4.2 Accessing CDD/Repository from DEC C Programs

A repository or data administrator uses CDO to create repositories, define directory structures, and insert record and field definitions into the repository. Many repositories can be linked together to form one logical repository. If the paths are set up correctly, users can access definitions as if they were in a single repository regardless of physical location.

CDO also creates the record paths. Once established, records can be extracted from the repository by means of the #pragma dictionary preprocessor directive in DEC C programs. At compile time, the record definition and its attributes are extracted from the designated repository. Then the compiler converts the extracted record definition into a DEC C structure declaration and includes it in the object module.

The #pragma dictionary preprocessor directive incorporates CDD/Repository data definitions into the DEC C source file during compilation. The #pragma dictionary directive can be embedded in a DEC C structure declaration. See Section 5.4.2 for sample usage of #pragma dictionary .

C.4.3 Support for CDD/Repository Data Types

CDD/Repository supports all OpenVMS data types. DEC C can translate all the OpenVMS data types when they are declared in CDD/Repository records. Data types that do not occur naturally in the DEC C language are handled in the following way:

The compiler applies various consistency checks to the record attributes extracted from CDD/Repository, particularly the field data-type attributes. An error message is issued when a record description does not pass the consistency checks. An informational message is issued when DEC C is confronted with facility-independent attributes that are not supported. An error message is issued when an attribute that is required by DEC C is not present, even if the attribute is optional in CDD/Repository record protocol.

The compiler synthesizes names for unnamed and filler fields. If CDD/Repository does not specify a name and a name is required by the syntax of the DEC C language, the compiler synthesizes the name cc_cdd$_unnamed_nnnnn. When CDD/Repository specifies a filler or a name that DEC C does not support, the compiler synthesizes the name cc_cdd$_filler_#nnnnn, which includes the pound sign character (#). The string nnnnn represents a unique integer. The # is not a valid character in an identifier, so you cannot reference these fields.

Unsupported data types are mapped into DEC C as structures of character arrays of the appropriate size. The declaration of these data types uses the following format:

struct { char Cname [s]; } CDDname;

The CDDname is the name of the member in the CDD/Repository record. Cname is an identifier of the form cc_cdd_$_unsupported_#nnnnn, where nnnnn is a unique integer, and s is the size of the data item, in bytes.

DEC C generates variant_struct or variant_union declarations for unnamed CDD/Repository structures and unions, so you do not have to specify these references.

Table C-2 summarizes the mapping between CDD/Repository data types and DEC C data types.

Table C-2 Mapping Between CDD/Repository and DEC C Data Types
CDD/Repository Data Type C Data Type
Unspecified
Unsigned byte
Unsigned word
Unsigned longword
Unsigned quadword
Unsigned octaword
Unsupported
unsigned char
unsigned short
unsigned int
Unsupported
Unsupported
Signed byte
Signed word
Signed longword
Signed quadword
Signed octaword
char
short
int
Unsupported
Unsupported
F_floating
D_floating
G_floating
H_floating
float 1
double 1
double 1
Unsupported
F_floating complex
D_floating complex
G_floating complex
H_floating complex
Unsupported
Unsupported
Unsupported
Unsupported
Text
Varying text 2
char [ n]
Unsupported
Numeric string:
Unsigned
Left separate
Left overpunch
Right separate
Right overpunch
Zoned sign

Unsupported
Unsupported
Unsupported
Unsupported
Unsupported
Unsupported
Packed decimal string Unsupported
Bit
Bit unaligned
Bit field 3
Bit field 3
Date and time Unsupported
Date
Virtual field
Varying string 2
Unsupported
Ignored
Unsupported


1If the specification of the /FLOAT or /[NO]G_FLOAT qualifier conflicts with the data type of the CDD/Repository record member, an informational message is issued and the member is represented as struct { char [8]} instead of double. CDD/Repository record member is D_floating, and G_floating format (the default) was specified on the CC command line; or if the data type of the record member is G_floating, and either D_floating or IEEE_floating (ALPHA ONLY) was specified on the command line; or if the data type of the record member is F_floating, and IEEE_floating (ALPHA ONLY) was specified on the command line.
2For these data types, the length of the structure is two bytes longer than the string to allow for the length field.
3A message is issued if the bit-string length is greater than 32.


Appendix D
DEC C Compiler Messages

This appendix lists the DEC C compiler diagnostic messages.

For each message, this appendix gives the mnemonic and the message text, an explanation of the message, and suggested actions to be taken to avoid the message. For more information about the format of compiler diagnostic messages, see Section 1.3.5.

To display a particular compiler message online, enter the following command:


$ HELP CC/DECC MESSAGE mnemonic[Return]  (VAX ONLY)
$ HELP CC MESSAGE mnemonic[Return]  (ALPHA ONLY)

To display a list of all compiler message mnemonics, enter the following command:


$ HELP CC/DECC MESSAGE[Return]  (VAX ONLY)
$ HELP CC MESSAGE[Return]  (ALPHA ONLY)

Some messages substitute information from the program into the message text. In this appendix, the portion of the text to be substituted is shown in italics.

Often, the same message is issued in different contexts within a program. In this appendix, the message context is indicated by the italicized word context within the message. The actual message issued by the compiler will contain one of the following phrases substituted for context:

You can control the messages issued with the /[NO]WARNINGS command-line qualifier ( Section 1.3.4) and the #pragma message preprocessor directive ( Section 5.4.11).

decdec, In this declaration,
decinitvr, In the initializer for
decnamdec, In the declaration of "name",
decnamfundef, In the definition of the function "name",
decundec, In the declaration of an unnamed object,
passta, In this statement,
abstractdcl, Invalid abstract declarator.

Description: An identifier was encountered in an abstract declarator. An abstract declarator is used to specify a type only and must not contain an identifier that specifies a declarator.
User Action: Correct the abstract declarator.
addrarray, context& before array "expression" is ignored.

Description: In certain modes, DEC C will ignore an address-of operator used on an entire array. This is for compatibility with other compilers that have this behavior.
User Action: Remove the address-of operator.
addrconstext, context"name" does not have a constant address, but occurs in a context that requires an address constant. This is an extension of the language.

Description: In modes other than strict ANSI, DEC C will allow an initializer for a pointer-type member of an automatic aggregate or union-type object to have an initializer that is not an address constant. This is an extension to ANSI C. Other C compilers might not successfully compile a program that uses this extension.
User Action: Be aware of this if you wish to port the program.
alignconst, Integer constant alignment number is not necessarily supported on all platforms.

Description: Although the specified alignment value is valid on this system, it might not be valid on other systems. For example, 16 is a valid alignment value on Alpha systems but would not be valid on VAX systems.
User Action: Be aware of this potential portability issue.
alignext, _align is a language extension.

Description: The _align storage class modifier is a language extension of DEC C. Other C compilers might not successfully compile a program that uses the extension.
User Action: Be aware of this extension if you wish to port the code.
alignpop, This "restore" has underflowed the member alignment's stack. No corresponding "save" was found.

Description: The member_alignment stack, managed by the #pragma member_alignment and #pragma environment directives, contains more restores than saves. This could signify a coding or logic error in the program.
User Action: Make sure each restore has a corresponding save.
argaddr, contexttaking the address of the constant expression "expression" in an argument list is a language extension.

Description: The DEC C compiler will allow the address of a constant to be passed as an argument to a function call. This is an extension to ANSI C. Other C compilers might not successfully compile a program that uses this extension.
User Action: Assign the constant to a variable, and pass the address of the variable.
arglisgtr255, Function call specifies an argument list whose length exceeds maximum specified by the calling standard. Any use of va_count by the called function will be wrong.

Description: The OpenVMS calling standard uses a byte-sized field to specify the size of the argument list. The argument list to this function call requires more storage than can be represented in this size. As a result, any use of va_count in the called function will return inaccurate information.
User Action: Either reduce the size of the argument list, or do not use va_count in the called function.
arglistoolong, Function call specifies an argument list whose length exceeds the VAX architecture limit. This call allocates stack space that is never deallocated by the called program.

Description: The OpenVMS VAX Calling Standard requires that the called program deallocate the storage allocated for its arguments. This is done by looking at the byte-size value that holds the argument list size. However, the argument list to this function call requires more storage than can be represented in a byte. As a result, the called function will not deallocate the proper amount of storage. This could result in unpredictable behavior.
User Action: Reduce the size of the argument list.
arraybrace, context a required set of braces is missing.

Description: The initializer for this array was not enclosed in braces. While some compilers allow this, ANSI C requires braces around the initializer.
User Action: Enclose the initializer in braces.
assignext, contextrelaxed struct or union type compatibility is a language extension.

Description: In certain modes, the compiler will allow assignments or comparisons between structs or unions of different types if their sizes are the same. This is an extension to ANSI C. Other C compilers might not successfully compile a program that uses this extension.
User Action: Recode the operation to use one of the memxxx run-time library functions.
autoalign, The alignment boundary of an automatic cannot be greater than longword or octaword.

Description: For automatic variables, the storage class modifier _align cannot specify an alignment greater than octaword on Alpha or longword on VAX. The alignment will be set to the octaword on Alpha or longword on VAX.
User Action: Decrease the alignment. If a larger alignment is required, declare the variable with static storage class.
autoexternal, contexta storage class of "auto" or "register" is illegal at file scope.

Description: The storage classes auto and register can only be used in a declaration that appears inside a function. They cannot be used in a declaration at file scope.
User Action: Remove the storage class specifier or move the declaration inside a function body.
badalign, Invalid alignment boundary.

Description: The _align storage class modifier was given an invalid value. See documentation for valid values on each platform.
User Action: Supply a correct value or remove the _align storage class modifier.
badboundchk, contextpointer arithmetic was performed more than once in computing an array element. The bounds checking code output by the compiler will only verify the "expr" expression.

Description: When an array is accessed using pointer arithmetic and run-time array bounds checking is enabled, the DEC C compiler is only able to output the checking code for the first pointer arithmetic operation performed on the array. This can result in an incorrect check if the resulting pointer value is again operated on by pointer arithmetic. Consider the expression a = b + c - d; where a is a pointer, b an array, and c and d integers. When bounds checking is enabled the compiler will output a check to verify that c within the bounds of the array. This will lead to an incorrect runtime trap in cases where c is outside the bounds of the array and c - d is not.
User Action: Recode the pointer expression so that the integer part is in parenthesis. This way the expression will contain only one pointer arithmetic operation. In the earlier example the expression would be changed to a = b + (c - d);
badbounds, contextthe array bounds are incorrectly specified.

Description: A multi-dimensional array declaration contains a missing dimension specifier in a dimension other than the first.
User Action: Correct the declaration.
badbreak, This break statement is not within a for, while, do, or switch statement.

Description: A break statement can only appear inside a for, while, do, or switch statement.
User Action: Remove the break statement, or replace it with a goto statement.
badcharsinhdr, Illegal characters after header name.

Description: While processing an #include directive whose argument did not start with either a '<' or '"' character, the compiler encountered a character it did not expect. This most often occurs when the directive argument is a macro and there is an error during the expansion of that macro.
User Action: Correct the argument to the #include directive.
badcmmntpstng, Token concatenation with comments might not be portable---use ## operator.

Description: A macro body contains a comment between two tokens with no white space either before or after the comment. Older C compilers allowed this as a form of token pasting. This type of token pasting might not give the desired results with newer compilers.
User Action: Use the ANSI C form of token pasting by replacing the comment with the ## token pasting operator.
badcondit, contexta common type could not be determined for the 2nd and 3rd operands ("true expression" and "false expression") of a conditional operator.

Description: The types of the second and third operands of the conditional operator must conform to a set of rules that define what the type of the result of the conditional operator itself will be. If the types of these operands do not conform to those rules, the compiler cannot determine the type of the result, which is an error. Refer to the language documentation for a complete list of valid combinations of types for the second and third operands of the conditional operator.
User Action: Modify the conditional expression so that the types of the second and third operands conform to the language rules.
badconstexpr, Syntax error in constant expression.

Description: A preprocessing constant expression contained a syntax error. The preprocessor was expecting to find a constant value or a left parenthesis. The preprocessor will assume a value of zero was encountered.
User Action: Correct the preprocessing constant expression.
badcontinue, This continue statement is not within a for, while, or do statement.

Description: A continue statement can only appear inside a for, while, or do statement.
User Action: Remove the continue statement, or replace it with a goto statement.
baddcl, This name cannot be undefined.

Description: The code has tried to #undef a macro that is predefined by ANSI C. This is not allowed. The #undef will be ignored.
User Action: Remove the #undef directive.
baddeclspec, Invalid argument to __declspec. Valid arguments are "thread" or "__thread".

Description: The only valid arguments to the __declspec storage class modifier are "thread" or "__thread".
User Action: Either use one of the valid arguments, or remove the storage class modifier.
baddefarg, Bad argument for "defined" operator.

Description: The defined preprocessing operator was given an invalid argument. The operator expects an identifier optionally enclosed in parenthesis. The value of the operator is undefined.
User Action: Supply a valid argument to the preprocessing operator.
badenum, Invalid enumerator.

Description: While processing an enumerator list, the compiler was expecting to encounter an identifier, but it found something else instead.
User Action: Correct the program syntax.
badexpr, Invalid expression.

Description: An invalid expression was encountered.
User Action: Correct the program syntax.
badfatcomment, The compiler cannot recover.

Description: In certain cases, the compiler cannot proceed after an unterminated comment. In these cases this message will be issued. Note that this message is always output after the opencomment error has been output.
User Action: Terminate the comment before the end-of-file.
badfloattype, contextthis floating point type "type" is not supported on this platform.

Description: The IEEE floating types __s_float and __t_float are not supported on the VAX platform.
User Action: Change the type to a floating type that is supported on VAX, or compile the application on a platform that does support IEEE floating.
badformalparm, Formal parameter isn't an identifier.

Description: While processing a macro-definition formal parameter list, the compiler encountered an invalid formal parameter specifier. The macro will be be defined, but the parameter ignored.
User Action: Correct the formal parameter list so that it consists of a comma separated list of identifiers.
badfuncstocls, The storage class of function name cannot be storage_class. This storage class has been changed to 'extern'.

Description: The globalref storage class cannot be used with a function declaration. The compiler will use the storage class extern.
User Action: Remove the globalref storage class from the function declaration.
badglobaltype, This declaration has type "type", which is invalid for a globalvalue. The extern_model strict_refdef will be used instead.

Description: An object with globalvalue storage class can only have a type of integer, enum, or pointer type. In other cases, the compiler will change the storage class from globalvalue to strict_refdef.
User Action: Change the data type to be one that is valid for a globalvalue.
badheadernm, Invalid include file or header name specification.

Description: An #include directive was not followed by a valid argument. The directive will be ignored. The #include directive should be followed by either a file specification enclosed in angle brackets, a file specification enclosed in quotes, or an identifier that specifies a text module (OpenVMS only), or a macro to be expanded.
User Action: Supply a valid argument to the #include directive.
badhexconst, Hex constant value too large.

Description: A hex constant used in a preprocessor directive is too large. The value of the constant will be undefined.
User Action: Decrease the value of the constant.
badifdef, An #ifdef or #ifndef is not followed by an identifier.

Description: An #ifdef or #ifndef preprocessing directive was not followed by an identifier. The compiler will consider the preprocessor argument to be an identifier that is not defined. Therefore, in these cases an #ifdef will always be FALSE, and an #ifndef will always be TRUE.
User Action: Supply a valid identifier to the directive.
badifndefarg, #ifndef argument is not an identifier.

Description: An #ifndef preprocessing directive was not followed by an identifier. The compiler will consider this to be a TRUE condition.
User Action: Supply a valid identifier to the directive.
badinclude, An #include directive has illegal syntax.

Description: An #include directive was not followed by a valid argument. This message occurs when the argument starts with a '<' or '"' character, but does not end with a matching '>' or '"'. In this case the compiler will add the matching '>' or '"' to the end of the argument and process the directive normally.
User Action: Correct the argument to the #include directive.
badlinedir, Missing argument for #line directive.

Description: An argument was not supplied to a #line preprocessing directive. This directive must be followed by a digit sequence that specifies the line number or a macro that expands to a digit sequence. The directive will be ignored.
User Action: Supply a valid argument to the directive.
badlinedirtv, Illegal token in #line directive.

Description: A #line directive was followed by an invalid argument. The #line directive should be followed by either a digit sequence or a digit sequence followed by a string literal. The #line directive will be ignored.
User Action: Supply a valid argument to the #line directive.
badlinkreg, Invalid register "register" for linkage pragma. Pragma is ignored.

Description: The compiler encountered bad register specifier in a #pragma linkage directive. The message should point at the offending specifier. The compiler will ignore the entire pragma.
User Action: Correct the directive.
badlinnum, Ignoring the line number for the #line directive---too small.

Description: A #line preprocessing directive specified a line value that is either zero or less than zero. This is not valid. The directive will be ignored.
User Action: Either remove the directive or supply a positive value to the line specifier.
badlocale, The compiler could not set its locale to either the locale-specific native environment or the "C" locale.

Description: During start-up, the compiler was unable to set its locale. As part of its initialization, the compiler will issue the call setlocale(LC_ALL, ""). If this call fails, the compiler will try to issue the call setlocale(LC_ALL, "C). If this call also fails, the compiler will issue this message and abort.
User Action: The best way to determine why the compiler is failing is to write a small program that contains the same library calls the compiler is making and then examine the return values.
badmacroinln, Illegal token from macro call in #line directive.

Description: A #line directive was followed by a macro whose expansion did not form a valid argument to the directive. The #line directive should be followed by either a digit sequence or a digit sequence followed by a string literal. The #line directive will be ignored.
User Action: Supply a valid argument to the #line directive.
badmacroname, "directive" directive is not followed by an identifier and is being ignored.

Description: A #define or #undef preprocessing directive was not followed by an identifier. The first argument to these directives must be an identifier that specifies the macro to define or undefine. The compiler will ignore the directive.
User Action: Correct the argument to the preprocessing directive.
badmbcomment, An invalid multibyte character was encountered in a comment.

Description: An invalid multibyte character was found in a comment. While this will not affect the program execution, it might not have been what you intended.
User Action: Correct the multibyte character.
badmcrorecurs, Recursive expansion of macro "name" exceeded num levels and was terminated.

Description: In certain cases, the compiler will allow a macro to be recursively expanded. In these cases, the compiler limits the level of the recursion to prevent the compiler from looping to the point where it consumes all available memory. When this level has been reached, this message is output.
User Action: Rewrite either the macro definition or the macro invocation so that the recursion ends before the compiler limit is reached. Note that the use of recursive macros is not a feature of the ANSI Standard, and most other C compilers will not support this.
badmember, Invalid member declaration.

Description: A struct or union contains an invalid member declaration. In most cases this error occurs when a semi-colon was omitted from the previous member declaration.
User Action: Correct the declaration.
badmemoff, contextmultiple definitions of member "name" found with different offsets.

Description: In certain modes, the compiler will allow a struct or union reference whose right operand is not a member of the struct or union type of the left operand. This is allowed for compatibility with other compilers. However, in these cases the right operand must specify a member name that is declared with the same type and at the same offset in every struct or union type that declares it. This message is issued when the compiler finds member name it is looking for declared with a different offset in more than one struct or union type.
User Action: DIGITAL recommends that the left operand or a struct or union reference specify a member that is a member of the type of the struct or union specified by the right operand. If this modification cannot be made then the member specified by the left operand must be declared at the same offset and with the same data type in all struct or union declarations that declare that member.
badmemtyp, contextmultiple definitions of member "name" found with different types.

Description: In certain modes, the compiler will allow a struct or union reference whose right operand is not a member of the struct or union type of the left operand. This is allowed for compatibility with other compilers. However, in these cases the right operand must specify a member name that is declared with the same type and at the same offset in every struct or union type that declares it. This message is issued when the compiler finds a member name it is looking for declared at the same offset but with different types in more than one struct or union type.
User Action: DIGITAL recommends that the left operand or a struct or union reference specify a member that is a member of the type of the struct or union specified by the right operand. If this modification cannot be made then the member specified by the left operand must be declared at the same offset and with the same data type in all struct or union declarations that declare that member.
badmoduleid, Invalid identifier found immediately following "#pragma module" or "#module" directive.

Description: The #pragma module or #module directive must be followed by an identifier that specifies the module name used by the linker.
User Action: Correct the directive.
badmultibyte, An invalid multibyte character was encountered in type of construction.

Description: An invalid multibyte character was encountered. The message will provide additional information about the location and attempted use of the character.
User Action: Correct the multibyte character.
badoctconst, Octal constant value too large.

Description: An octal constant used in a preprocessor directive is too large. The value of the constant will be undefined.
User Action: Decrease the value of the constant.
badparsedecl, In this declaration, "id" must specify a type.

Description: In processing a declaration, the type of the declarator has not been declared as a typedef.
User Action: Either declare the type as a typedef, or correct the spelling of the type specifier in this declaration.
badparseparam, In this parameter list, "param" must either be a type or must be followed by a ",".

Description: In processing a function declaration, the compiler has found a case where the parameter list begins with two identifiers not separated by a comma and where the first identifier is not a type specifier. If this is an old-style declaration the two identifiers must be separated by a comma. If this is a prototype declaration, the first identifier must specify a type.
User Action: Correct the function parameter specifiers.
badppdir, File ends in an unfinished pp directive.

Description: An unexpected end-of-file was encountered during a preprocessing directive.
User Action: Correct the directive.
badpragmalink, A bad linkage pragma was specified. Pragma is ignored.

Description: The compiler encountered a bad #pragma linkage directive. The error message should point to the place in the pragma that the compiler considers bad. The compiler will ignore the entire pragma.
User Action: Correct the directive.
badprefix, Argument to extern_prefix is not a recognized keyword or a quoted string. Pragma is ignored.

Description: An invalid argument has been specified for the #pragma extern_prefix preprocessing directive. The directive expects either the identifiers "save", "__save", "restore", "__restore", or a string constant that specifies the external prefix to use. The compiler will ignore the pragma.
User Action: Correct the argument to the pragma.
badregister, context"name" has register storage class, but occurs in a context that precludes register storage. The storage class has been changed to auto.

Description: An object that was declared with register storage class has been referenced in a way that is not valid for a register. The most common example is taking the address of an object declared with register storage class. As certain array accesses also require taking the address of an array, this message can also be output for accessing the element of an array declared with register storage class. The compiler will change the storage class from register to auto.
User Action: Either remove the register storage class from the declaration, or change the reference to be one that is valid for objects with register storage class.
badreturntype, contexta function cannot return type type.

Description: A function return type cannot be an array or function type.
User Action: Correct the function declaration so that the return type is valid.
badseverity, The severity of message id name cannot be made less severe. The severity for this message was not changed.

Description: The severities of the compiler's error and fatal messages cannot be changed to a severity that is less severe. The compiler's fatal messages cannot be changed to any other severity. The compiler's error messages can only be changed to fatals.
User Action: Remove the pragma or compiler option that tried to change the severity.
badstaticcvt, In the static initialization, the address cannot be converted to the destination type.

Description: A static initialization tried to convert a link-time address to another type. However, the linker on this platform will not support such a conversion.
User Action: Rewrite the static initialization, or perform the initialization using runtime code.
badstmt, Invalid statement.

Description: An invalid statement was encountered. The most common cause of this error is when a declaration appears after the first statement in a compound statement.
User Action: Correct the program syntax.
badsubscript, contextan array subscript expression is either less than zero or greater than the largest value that can be represented by the size_t type.

Description: The compiler has detected an array subscript expression that is outside the bounds of any valid array. The array access might cause unpredictable behavior.
User Action: Specify a valid array subscript.
badsymsize, The size of the object exceeds max_size bytes.

Description: The size of a declared object exceeds the maximum size of an object allowed on this platform.
User Action: Reduce the size of the object.
badtken, Lexically invalid token.

Description: An invalid token was encountered in a preprocessing directive.
User Action: Correct the preprocessing directive.
badunknownvla, contexta "*" bounds specifier is invalid. Using a "*" to specify a variable-length array of unknown size is only valid in declarations with function prototype scope.

Description: Using a "*" as a bounds specifier to designate a variable-length array with unknown size is only valid in declarations with function prototype scope.
User Action: Supply a valid bound specifier.
baduselink, A bad use_linkage pragma was specified. Pragma is ignored.

Description: The compiler encountered a bad #pragma use_linkage directive. The error message should point to the place in the pragma that the compiler considers bad. The compiler will ignore the entire pragma.
User Action: Correct the directive.
badusermacro, This name cannot be a user-defined macro.

Description: The code has tried to #define either a macro that is predefined by ANSI C or the DEFINED preprocessing keyword. This is not allowed. The #define will be ignored.
User Action: Remove the #define directive.
badvastart, contextold-style parameter "name", with type that requires default argument promotion, cannot be used with va_start.

Description: It is invalid for the parameter specified in va_start to be one that requires default argument promotion.
User Action: The recommended fix is to recode the function definition to use a prototype-format definition. It is also possible to change the parameter declaration to use one of the default types, for example double.
bifenabled, The function "routine name" is a builtin function reserved to the compiler, and does not require a #pragma intrinsic. The function will continue to be treated as a builtin.

Description: A function identifier specified in a #pragma function intrinsic is the name of a builtin function. These functions cannot be explicitly enabled, they are always handled as builtin functions.
User Action: Remove the inappropriate use of the pragma.
bifproto, contextthe built-in function, "name", requires a prototype declaration to be included from filename.

Description: Invoking a built-in function requires that the function be declared before it is invoked. This should be done by including the header file noted in the message.
User Action: Include the header file before the function is invoked.
bitarray, The CDD description for name specifies that it is an array of bitfields; It has been converted to a scalar bitfield.

Description: DEC C does not allow arrays of bitfields. The resulting C declaration will be a bitfield of the same total size as that specified in the CDD description.
User Action: If a bitfield type is acceptable, then no user action is necessary. If, however, the bitfield type is not acceptable, then the CDD description should be altered.
bitbadrep, contextthe bitfield type is not an integral type.

Description: A bitfield has been declared with a non-integral type. ANSI C requires that all bitfields be declared with either int, unsigned int, or signed int type.
User Action: Change the type of the bitfield.
bitconstsign, contextthe integer constant "constant" does not have the same sign as the 1-bit bitfield it is being converted to.

Description: Either an unsigned 1-bit bitfield was assigned -1, or a signed 1-bit bitfield was assigned 1. This may not be what you intended.
User Action: Change the constant to be the appropriate sign.
bitfieldsize, The CDD description for bitfield name specifies a size greater than 32; The excess is declared separately.

Description: DEC C does not allow individual bitfields larger than 32. As a result, a series of bitfields have been declared whose total size matches that of the CDD definition.
User Action: If the generated definitions are acceptable, then no user action is necessary. If, however, the generated definitions are not acceptable, then the CDD description should be altered.
bitnotint, contextthe bitfield type is not an int, signed int or unsigned int.

Description: A bitfield has been declared with a type other than int, signed int or unsigned int. This is not allowed by the ANSI standard.
User Action: Change the declaration to use one of the int types or compile with a standard mode that allows this behavior.
bitwidth, contextthe bitfield width expression "expression" is outside the range lower to upper.

Description: A bitfield width specifier was either less than zero, or is greater than the number of bits in an int. In some modes, the compiler will assume a width specifier equal to the number of bits in an int.
User Action: Use a valid bitfield width specifier.
bitwidthtyp, contextthe bitfield width expression "expression" does not have an integral type.

Description: A bitfield width specifier does not have an integral type. A bitfield width specifier must be an integral constant expression.
User Action: Correct the width specifier.
blockextvla, contextthe block scope identifier "name" cannot be declared with a variably modified type because it has extern storage class.

Description: Only ordinary identifiers with block scope and without storage class extern, or ordinary identifiers with function prototype scope can be declared with a variably modified type.
User Action: Correct the declaration.
bltinargcnt, contextan incorrect number of arguments were passed to the builtin function, "function expression".

Description: This message is output on OpenVMS systems when the number of arguments passed to the __VA_START_BUILTIN builtin function is not one.
User Action: Correct the call to __VA_START_BUILTIN.
bltinimplret, contextfor the function "name", the implicit return type of "type" is not consistent with the expected type of "type". It will be treated as an ordinary implicitly defined external function.

Description: A function that could be handled internally by the compiler has not been declared, so an implicit declaration has been created for the function. The return value for the function is being used, and the implicit return type does not agree with what the compiler expected to see. In such cases, the function will not be handled internally, but will instead be called at run time in the usual manner. This could result in a performance loss, or possibly incorrect results if the implicit return type is incorrect.
User Action: If the function is intended to refer to the runtime library routine, the appropriate header file should be included in the source. Alternatively, a correct prototype could be provided privately in the source file. If the function is intended to be a replacement for the runtime library routine, disable the intrinsic version by specifying "#pragma function(function_name)" in the source file.
boundadj, The CDD description for name specifies non-zero-origin dimension bound(s); The bound(s) are adjusted to zero-origin.

Description: The CDD description specifies lower bounds(s) for an array that is non-zero. The resulting C definition will have the upper bound(s) adjusted for lower bound(s) of zero.
User Action: Verify that all subscript expressions are referencing the correct array element(s).
boundnotint, contextthe array bound "expression" does not have an integral type.

Description: The compiler has encountered an array-bounds specifier that is not an integral type. Array-bounds specifiers must be positive integer constants.
User Action: Correct the array-bounds specifier
bugcheck, Compiler bugcheck. Submit an SPR with a problem description.

Description: An unexpected condition occurred in the compiler. This is most likely caused by a compiler bug.
User Action: Reduce the program that is causing the failure as much as possible. This often leads to a small test case. Please submit a problem report containing enough information for DIGITAL Engineering to reproduce the problem. The problem report should include the small test case.
cannotredef, Cannot #define a macro that is currently expanding.

Description: The program is trying to #define the same macro it is currently expanding. The #define will be ignored.
User Action: Remove the #define, or move it after the expansion of the macro.
cannotundef, Cannot #undef a macro that is currently expanding.

Description: The program is trying to #undef the same macro it is currently expanding. The #undef will be ignored.
User Action: Remove the #undef, or move it after the expansion of the macro.
cantdisable, The message id name cannot be disabled.

Description: The compiler's error and fatal messages cannot be disabled.
User Action: Remove this message id from the list of messages being disabled on the command line or in the #pragma message line.
cantmkrpstory, Attempt to create repository "string" for shortend names failed; OpenVMS status: reason.

Description: A compilation that used the /NAMES=SHORTENED qualifier could not open the repository used to store the shortened names. This could be because an invalid name was specified in the /REPOSITORY qualifier. The message will give additional information about the failure.
User Action: Correct whatever caused the failure.
cddattr, One or more field descriptions in this CDD record specify an attribute that is being ignored.

Description: The CDD description specifies an attribute that is not supported in DEC C. The attribute is ignored.
User Action: No action is required.
cddbadid, An invalid identifier, name, is being ignored in the dictionary directive.

Description: An unexpected identifier follows the dictionary pathname in a dictionary preprocessing directive. The identifier is ignored.
User Action: Remove the invalid identifier(s) in the dictionary directive.
cddext, #dictionary is a language extension.

Description: The #dictionary directive is an extension of DEC C/C++ on OpenVMS. The program might not compile with other compilers or on other platforms.
User Action: Be aware of this if you wish to port the program.
cddpath, A valid CDD pathname was not found. The CDD directive has been ignored.

Description: The #dictionary preprocessing directive was not followed by an argument. The directive must be followed by a character string that gives the path name of a CDD record, or a macro that expands to the path name of the record.
User Action: Supply a valid argument to #dictionary. DIGITAL also recommends that the #dictionary preprocessing directive be replaced by the #pragma dictionary operator.
cddtoodeep, The attributes for the Common Data Dictionary record description name exceed the implementation's limit for record complexity.

Description: The CDD description specifies more attributes than the interface between the CDD and the compiler can handle.
User Action: Simplify the record description.
charconst, Ill-formed character constant.

Description: An invalid character constant was encountered.
User Action: Correct the character constant.
charoverfl, A character constant value requires more than sizeof(int) bytes of storage.

Description: A character constant is too long to fit in an int. The compiler will ignore the extra characters.
User Action: Remove the extra characters from the character constant.
classnoinit, contextthe struct or union object "name" is uninitialized and has a const member.

Description: An object of struct or union type has a const member and has not been initialized. This might not have been what you intended. DIGITAL recommends that you initialize all objects with the const attribute. The missing initializer will make this an invalid declaration in C++.
User Action: Initialize the struct or union object.
closbracket, Missing "]".

Description: The compiler was expecting a closing bracket, but one was not found.
User Action: Correct the program syntax.
closebrace, Missing "}".

Description: The compiler was expecting a closing brace, but one was not found.
User Action: Correct the program syntax.
closeparen, Missing ")".

Description: The compiler was expecting a closing parenthesis, but one was not found.
User Action: Correct the program syntax.
colmajor, The CDD description for name specifies that it is a column-major array; It has been converted to a one-dimensional array.

Description: The DEC C compiler supports only row-major arrays. Therefore the column-major array description in the CDD has been converted to a one-dimensional array of the same total size and with the same total number of elements.
User Action: Verify that all subscript references to the array reference the correct array element.
compilerbug, Bug found in compiler: bug.

Description: This message indicates that the compiler detected a bug within itself.
User Action: Report the compiler bug to DIGITAL. Please include an example program that reproduces the problem.
conlinkreg, Conflicting register usage between "first set" and "second set". Pragma is ignored.

Description: The same register was specified in two different register lists of a #pragma linkage directive. The compiler will ignore the entire pragma.
User Action: Correct the directive.
conpsectattr, Conflicting psect attribute overrides previous attribute.

Description: A psect attribute specified in a #pragma extern_model directive contradicts an attribute specified earlier in the directive. This attribute will override the one specified earlier.
User Action: Remove one of the contradictory psect attributes.
constfunc, Ignoring const type qualifier in declaration of name.

Description: The const type qualifier cannot be used with a function type. The compiler will ignore the type qualifier.
User Action: Remove the type qualifier.
constinwrt, Const variable resides in wrt extern model.

Description: The current extern model places all external objects in a modifiable section. Placing an object with a const type qualifier in such a section means that there is no run-time protection against writing to the object. This might not have been what you intended.
User Action: Place const objects in sections that cannot be modified.
constnoinit, contextthe const object "name" is uninitialized.

Description: A defined or tentatively-defined const object has not been initialized. This would not be valid in C++. It is also considered good programming practice to initialize all const objects with their value.
User Action: Either remove the const type modifier, or supply an initializer for the object.
conststocls, contextthe const object "name" has no explicit storage class. In C, its storage class defaults to "extern"; in C++, it defaults to "static". Add an explicit "extern" or "static" keyword.

Description: One of the more signifcant and confusing differences between C and C++ is their treatment of file scope const objects declared without a storage class. C will give the object extern storage class, making the object visible in other compilation units. C++ will give the object static storage class. This can cause an undefined symbol error when other compilation units try to reference the symbol.
User Action: Add an explicit "extern" or "static" keyword to the declaration.
contfile, A file ends with a continuation character.

Description: All source files, even those included via the #include preprocessing directive, must not end with a backslash continuation character.
User Action: Either remove the continuation character or add an additional line to the source program that does not end in a continuation character.
controlassign, contextthe assignment expression "expression" is used as the controlling expression of an if, while or for statement.

Description: A common user mistake is to accidentally use assignment operator "=" instead of the equality operator ":=,=" in an expression that controls a transfer. For example saying if (a = b) instead of if (a :=,= b). While using the assignment operator is valid, it is often not what was intended. When this message is enabled, the compiler will detect these cases at compile-time. This can often avoid long debugging sessions needed to find the bug in the user's program.
User Action: Make sure that the assignment operator is what is expected.
convaraslit, context the use of the const variable "name" in place of a literal constant is a language extension.

Description: DEC C will allow a non-volatile const variable that has been initialized to be used in contexts where a constant is required. For example, as the bounds specifier to an array. This is an extension to ANSI C. Other C compilers might not successfully compile a program that uses this extension.
User Action: Use the constant value instead of the variable.
crxcond, Common Data Dictionary description extraction condition.

Description: Something went wrong while trying to get the CDD record description from the CDD. The error message that follows gives more information about the nature of the problem.
User Action: If necessary, correct the indicated condition in the CDD record description or with the user environment.
cvtdiftypes, context"expression" of type "type", is being converted to "target type".

Description: In certain modes, the compiler will allow assignments or comparisons between pointer and integer types. This is an extension to ANSI C. Other C compilers might not successfully compile a program that uses this extension.
User Action: Use a cast operator to convert one operand to the other.
cvtu32to64, contextan unsigned 32-bit integer constant that has its high-order bit set has been converted to a signed 64-bit type. The conversion will not sign-extend.

Description: This message indicates a conversion that may produce unexpected results on this platform because the destination type is a 64-bit type instead of a 32-bit type.
User Action: If this is the intended behavior, first cast the constant to an unsigned 64-bit type.
cxxkeyword, "C++ keyword" is a keyword in C++. Using it as an identifier in your C program will prevent porting your program to C++.

Description: This identifier is a keyword in C++. The program is, therefore, not a valid C++ program.
User Action: Choose a different name for the identifier.
dclmismatlnk, The declaration of "name" has number parameter(s) but its linkage "name" has number. Function will have standard linkage.

Description: The number of parameters specified in a function's declaration does not match the number of parameters specified by the special linkage associated with this function. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the number of parameters specified by the special linkage match the number of parameters in the function.
dclmismatlnk0, The declaration of "name" has an unknown number of parameters and cannot be used with the linkage "name". Function will have standard linkage.

Description: If a function's special linkage specifies parameter information, the function declaration must not specify an unknown or variable number of parameters. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the number of parameters specified by the special linkage match the number of parameters in the function.
dclmismatlnk1, where "name" modifierhas a floating type but its linkage "name" specifies an integer register. Function will have standard linkage.

Description: A parameter or return value of a function is a floating type, but the corresponding parameter or return value in the function's special linkage specifies an integer register. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the register specified by the special linkage matches the type of of the corresponding parameter and return value of the function.
dclmismatlnk2, where "name" modifierrequires an integer register but its linkage "name" specifies a floating register. Function will have standard linkage.

Description: A parameter or return value of a function is an integer type, but the corresponding parameter or return value in the function's special linkage specifies a floating register. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the register specified by the special linkage matches the type of of the corresponding parameter and return value of the function.
dclmismatlnk3, where "name" has a size that is incompatible with the number of registers specified by its linkage "name". Function will have standard linkage.

Description: The size of a parameter or return value of a function is incompatible with the size specified by the function's special linkage. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the number of registers specified by the special linkage match the type of the corresponding parameter and return value of the function.
dclmismatlnk4, where "name" modifierhas a type that is not allowed because the function has the linkage "name". Function will have standard linkage.

Description: Using a special linkage places certain restrictions on the type of a function's parameters and return value. In general, the type must be a scalar type that can be represented by a register or registers on this platform. In cases where some other type is used, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Either remove the function name from the #pragma use_linkage directive that gave the function a special linkage, or modify the type to be acceptable to the special linkage.
dclmismatlnk5, The function "name" has a void return type but its linkage "name" specifies a return location. Function will have standard linkage.

Description: If a function's special linkage specifies return value information, the function declaration must not specify a void return type. The special linkage was specified via the #pragma use_linkage directive. Because of this mismatch, the compiler will ignore the special linkage and use the standard linkage instead.
User Action: Make sure the return value specified by the special linkage matches the return type of the function.
decconstlarge, Decimal constant value too large.

Description: A decimal constant used in a preprocessor directive is too large. The value of the constant will be undefined.
User Action: Decrease the value of the constant.
declarator, Invalid declarator.

Description: A declaration did not contain an identifier that specifies the item to be declared.
User Action: Specify a declarator in the declaration.
declspecext, __declspec is a language extension.

Description: The __declspec storage class modifier is a language extension of DEC C. Other C compilers might not successfully compile a program that uses the extension.
User Action: Be aware of this extension if you wish to port the code.
defparmtype, The type of the parameter name defaults to "int".

Description: The parameter of an old-style function definition was not declared. It will default to int type.
User Action: Declare the parameter. DIGITAL also recommends that old-style function definitions be replaced by prototype-format definitions.
defreturntype, The type of the function name defaults to "int".

Description: A function definition did not include a type specifier for the function's return value. It will default to int. This might not be what you intend.
User Action: It is a good programming practice to give all function definitions explicit return types.
desigbadarr, context, a struct/union designator cannot be used with an object of array type.

Description: An initialization designator must match the type of the object being initialized. In this initialization, the current object is an array so a struct/union designator is not allowed.
User Action: Correct the initialization.
desigbadcomp, context, an array designator cannot be used with an object of struct or union type.

Description: An initialization designator must match the type of the object being initialized. In this initialization, the current object is a struct or union, so an array designator is not allowed.
User Action: Correct the initialization.
desigbadind, context, the constant expression "expression" in an array element designator is not a positive integer.

Description: An array-element designator must be an constant expression that yields a positive integer value.
User Action: Correct the element designator.
desigbadind1, context, the array element designator "[expression]" specifies an element beyond the end of the array.

Description: An array element designator must specify a valid array element.
User Action: Correct the element designator.
designationna, The use of a designation in an initializer list is not supported in this compilation mode.

Description: Initializer lists that contain designations are currently planned for the next revision of the ANSI C standard. DEC C will only support this extension in the relaxed ANSI mode and the mode that corresponds to that revision of the standard.
User Action: Use a compilation mode that supports the use of designations.
designatoruse, The use of a designation in an initializer list is not yet part of an approved ANSI standard.

Description: Initializer lists that contain designations are currently planned for the next revision of the ANSI C Standard. Although the DEC C implementation follows a draft of the Standard, there is no guarantee that the final Standard will match the draft used for the DEC C implementation. If the final Standard does change, there is a chance that this designator will not be accepted by a future release of DEC C.
User Action: Be aware of this.
designomemb, context, the component designator "name" is not a member of the current structure or union object being initialized.

Description: An initialization designator specifies a struct or union member that is not a member of the current struct or union object.
User Action: Correct the initialization.
desigscalar, context, a designator cannot be used with an object of scalar type.

Description: An initialization designator can only be used on objects of array, structure, or union type. In this initialization, the current object being initialized is a scalar type so a designator is not allowed.
User Action: Correct the initialization.
directvnocpp, "Directive text" is not recognized as a preprocessing directive in nopreprocessing mode, and is being ignored.

Description: An invalid preprocessing directive was encountered in a compilation performed with the -nocpp option. When using the -nocpp option, only a limited number of preprocessing directives, such as #pragma and #line, can appear in the program. The compiler will ignore the rest of the line.
User Action: Either remove the directive or compile without the -nocpp option.
disredecl, contextthe type of the external "name" is not compatible with the type of a declaration of "name" in another name scope at location.

Description: The same external identifier has been declared in different scopes with incompatible types. This might not have been what you intended.
User Action: Change all declarations of the same external identifier to use the same type.
dollarid, Extension: A '$' was encountered in an identifier.

Description: Accepting a "$" character in an identifier is an extension of DEC C/C++. The program might not compile with other C/C++ compilers.
User Action: Be aware of this if you wish to port the program.
dupcase, The switch statement containing this case label already has a case label for "number".

Description: A switch statement contains more than one case label for the same case value.
User Action: Remove the duplicate case label.
dupdefault, The switch statement containing this default label already has a default label.

Description: A switch statement can contain only one default label.
User Action: Remove the duplicate default label.
dupenum, contextthe enumerator "name" is not unique.

Description: An enumerator constant is declared more than once with the same value. While this is accepted by DEC C, it is not allowed by the ANSI standard.
User Action: Either use a different enumerator name or remove the previous declaration of the name.
dupextern, The declaration of "name1" will map to the same external name as the declaration of "name2" at where.

Description: The compiler has detected a case where two different names in a program will map to the same external name in the output object file. This can cause unpredictable results at runtime. This will most often happen when the /NAMES=UPPERCASE or /NAMES=LOWERCASE qualifier causes two names with different case spellings to map to the same external name.
User Action: Either use the /NAMES=AS_IS qualifier, or modify one of the names.
duplabel, The label "name" is already defined in this procedure at location.

Description: A label has already been defined. Each function can define each label only once.
User Action: Remove the duplicate label definition.
duplink, Duplicate linkage pragmas for linkage name "linkage name".

Description: The same linkage specifier has been defined in more than one #pragma linkage directive.
User Action: Declare each linkage only once.
dupparm, context"name" is a duplicate parameter name.

Description: The parameter identifier list of an old-style function definition uses the same identifier more than once.
User Action: Each identifier in the parameter list must be unique. DIGITAL also recommends that old-style function definitions be replaced by prototype-format definitions.
dupstorcls, contextthe same storage class modifier occurs more than once.

Description: This declaration specifies the same storage class modifier more than once.
User Action: Remove the extra uses of the storage class modifier.
duptypedef, context"name" has a duplicate typedef at where. This might not be portable.

Description: The same typedef has been declared to the same type more than once. ANSI C does not allow this and other compilers might not accept it.
User Action: Remove the redundant declaration.
duptypespec, contextthe same type specifier occurs more than once.

Description: The same type specifier appears more than once in the same declaration. The redundant specifier will be ignored.
User Action: Remove the duplicate type specifier.
duptypqual, contextthere is a redundant use of type qualifier "const or volatile".

Description: The same type qualifier appears more than once in a type specifier.
User Action: Remove the redundant type qualifier.
elifignored, Out of place #elif directive ignored.

Description: An #elif preprocessing directive was encountered outside of an #if/#endif body. The directive will be ignored.
User Action: Remove the directive.
ellipsearg, ANSI C does not permit the use of an ellipsis as an only argument.

Description: ANSI C requires at least one formal parameter be declared before the ellipses. This declaration might not be portable to other C compilers.
User Action: Recode the function declaration to contain at least one formal parameter.
ellipseparm, contexta parameter with type "type" matches an ellipsis in previous declaration at location.

Description: A function that has been previously declared as taking variable arguments is now redeclared as using a different number of formal parameters before the start of the variable argument list. This redeclaration might not be portable to other C compilers.
User Action: Recode the function declarations to match each other.
elseignored, Out of place #else directive ignored.

Description: An #else preprocessing directive was encountered outside of an #if/#endif body. The directive will be ignored.
User Action: Remove the directive.
embedcomment, A comment is neither preceded nor followed by white space.

Description: A comment is neither preceded nor followed by white space. In certain modes the compiler will paste the tokens before and after the comment together to form a single token. This behavior is not valid in ANSI C. Writing programs that rely on this behavior might prevent the program from being compiled on other platforms.
User Action: Add white space before or after the comment, or use the ## operator to paste tokens together.
emptycharconst, Empty character constant.

Description: In some modes the DEC C/C++ compiler will allow a null character constant. The compiler will give this constant a value of zero. Accepting an empty character constant is a language extension. Empty character constants are not valid in ANSI C. Writing programs that rely on this behavior might prevent the program from being compiled on other platforms.
User Action: Replace the empty character constant with '\0'.
emptyfile, Source file does not contain any declarations.

Description: This source file contains no declarations. This might not have been what you intended. For example, perhaps a necessary macro was not defined.
User Action: Every source program should contain at least one declaration.
enum16bit, contextthe enumeration constant name is out of the range -32768 to 32767. This might not be portable.

Description: An enum constant is larger than can be represented in 16 bits. This would not be portable to a system with an int size of 16 bits.
User Action: Be aware of this if you wish to port to a system with an int size of 16 bits.
enumcalc, contextthe enum variable "expression" is used in an arithmetic operation.

Description: An enumerated type variable was used in an arithmetic operation. While this is valid in C, it might not have been what you intended.
User Action: Verify the use of the enum variable.
enuminit, contextthe enumerator "name" is initialized to the nonintegral value "expression".

Description: An enum declaration contains an enumeration constant initializer that does not have an integer type. The initializer for an enumeration constant must be an integral constant expression.
User Action: Correct the initializer.
enumrange, contextthe enumeration constant "name" is out of range INT_MIN to INT_MAX and will be truncated.

Description: An enumeration constant must be representable as an int type. The specified value is outside the range of an int. In modes where this is a warning, the compiler will use the low-order bits to form the int value.
User Action: Use a valid constant value.
enumused, contextthe enumerator name "name" has been used previously.

Description: The specified enumerator name has been previously declared as something other than an enumerator.
User Action: Either use a different enumerator name or remove the previous declaration of the name.
errormessage, #errorerrormsg

Description: An #error directive was encountered. This message will include the text that follows the directive in the source program.
User Action: Remove the #error directive, or supply the proper macro definitions so that the compiler will skip the directive.
escoverfl, Invalid escape sequence encountered.

Description: An escape sequence in a character or string literal specifies a value outside the range of a character or wide character.
User Action: Specify a valid escape sequence.
expandeddefined, Macro expansion includes the token "defined", which will be treated as an operator. This might not be portable.

Description: A macro expanded during the processing of a preprocessor #if directive included the token "defined". The DEC C/C++ compiler will treat this as the defined preprocessing operator. Other compilers might treat this differently.
User Action: Rewrite the macro not to use the "defined" operator.
exprcvtint, The expression "expression" has been converted to integer.

Description: In certain modes, DEC C will allow switch expressions or case constants to be non-integer types. The expression or constant will be converted to int. In one of these cases, this warning will be issued.
User Action: Cast the switch expression to an integer type or use an integer case constant.
exprnotint, The expression "expression" has type type, which is not integral.

Description: An expression that is required to have an integer type had a type that is not integral. This is not valid. An example of a situation where an integer is required is that in most modes DEC C requires that the switch control expression have integer type.
User Action: Modify or cast the expression so that it has integer type.
exprnotused, contextthe expression "expr" is never used.

Description: The compiler has detected an expression that is not used, and might not have a side-effect. This might not have been what you intended.
User Action: If the expression has a desired side-effect, the message can be ignored. Otherwise, you might want to consider removing the expression.
extendtype, This platform specific type is a language extension.

Description: The use of the types __int8, __int16, __int32, __int64, __f_float, __g_float, __s_float, __t_float might not be portable to other platforms or to other C compilers.
User Action: Be aware of this portability concern.
externinit, DEC C allows the initialization of a variable with extern storage class. This differs from the VAX C behavior.

Description: VAX C does not allow a variable with extern storage class to be initialized. DEC C will allow this, even in vaxc mode.
User Action: Be aware of this difference if you plan to compile the source with VAX C.
externpop, This "restore" has underflowed the extern model's stack. No corresponding "save" was found.

Description: The extern_model stack, managed by the #pragma extern_model and #pragma environment directives, contains more restores than saves. This could signify a coding or logic error in the program.
User Action: Make sure each restore has a corresponding save.
extpreafter, This directive will not set the extern_prefix of "name" because there is a previous declaration of the identifer with external linkage at where.

Description: When an identifier is specified in a #pragma extern_prefix, the declaration of that identifier must appear after the #pragma.
User Action: Reorder the declaration and the #pragma so that the #pragma comes first.
extpreagain, This directive overrides the extern_prefix for "name" specified by an earlier #pragma extern_prefix at where.

Description: Two #pragma extern_prefix directives have specified different non-empty extern_prefixes for the same identifier. In such cases the later directive will set the extern_prefix for the identifier.
User Action: If it is necessary to respecify the extern_prefix for an identifier, first remove the prefix (by setting it to an empty string) and then specify the new prefix in a subsequent #pragma.
extprenodecl, There is no identifier named "name" with external linkage declared in this compilation unit.

Description: A #pragma extern_prefix directive specifies an extern prefix for an identifier that is not declared with external linkage in the compilation unit. This may not have been what you intented.
User Action: Remove the identifier from the #pragma extern_prefix, or declare it with external linkage, or set the prefix for this identifier to an empty string.
extrabraces, context is enclosed within too many pairs of braces.

Description: An initializer contains too many open braces for the object being initialized.
User Action: Reduce the number of braces.
extramodule, Redundant "#pragma module" or "#module" directive ignored.

Description: A compilation unit can contain only one #pragma module or #module directive. All subsequent directives will be ignored.
User Action: Remove the extra directives.
extrapragargs, Extra pragma arguments to #pragma pragma were found. Pragma is ignored.

Description: Unexpected arguments were found at the end of a #pragma directive. The directive will be ignored.
User Action: Remove the extra arguments.
extrasemi, Extraneous semicolon.

Description: An extra semicolon was found at the end of a declaration. It will be ignored.
User Action: Remove the extra semicolon.
falloffend, The last statement in non-void function "name" is not a return statement.

Description: A function that returns a value does not end with a return statement. If function execution reaches the end of the function, the implied return statement that executes will return an undefined value. This might not have been what you intended.
User Action: End the function with a return statement that specifies a return value.
fileclose, An error occurred while attempting to close a source file: problem.

Description: An unexpected error occurred while closing a source file. The message text will contain additional information about the failure.
User Action: Correct the condition that caused the failure.
fileopen, An error occurred while attempting to open the source file: problem.

Description: An unexpected error occurred while opening a source file. The message text will contain additional information about the failure.
User Action: Correct the condition that caused the failure.
fileread, An error occurred while attempting to read a source file: problem.

Description: An unexpected error occurred while reading a source file. The message text will contain additional information about the failure.
User Action: Correct the condition that caused the failure.
filescopevla, contextthe file-scope identifier "name" cannot be declared with a variably modified type.

Description: Only ordinary identifiers with block scope and without storage class extern, or ordinary identifiers with function prototype scope can be declared with a variably modified type.
User Action: Correct the declaration.
finbranch, A goto to the label "label" branches into a finally handler.

Description: A goto statement tried to transfer into a finally handler. This is illegal.
User Action: Modify the goto or move the label outside the handler.
floatconsqual, The float_const_qual is not valid in strict ANSI mode and will be ignored.

Description: The -float_const option cannot be used in strict ANSI mode. The option will be ignored.
User Action: Either remove the -float_const option or use a different mode.
floatconst, Ill-formed floating constant.

Description: An invalid floating constant was encountered.
User Action: Correct the floating constant.
floaterr, contexta floating point error occurs in evaluating the expression "expression".

Description: A floating-point error occurred while evaluating a constant expression. This is often caused by an invalid floating-point number. The value of the expression is undefined.
User Action: Correct the floating-point constant expression.
floatoverfl, contextfloating-point overflow occurs in evaluating the expression "expression".

Description: A floating-point overflow occurred while evaluating a constant expression. The value of the expression is undefined.
User Action: Correct the floating-point constant expression.
foundcr, A carriage-return character was encountered; it is being treated as white space.

Description: The compiler encountered a carriage-return character some place other than inside a character or string constant. The compiler will treat the carriage-return as white space.
User Action: The source might have been created by some non-standard means. If possible, replace all carriage-return characters outside of character or string constants with white space.
funcelement, contextthe element type of an array type is a function type.

Description: The compiler has encountered an array with an element type of function. An array element must be an object type.
User Action: Change the type of the array element.
funcidlis, contexta function declarator has an identifier list but is not part of a function definition. Extraneous parameter names are ignored.

Description: A parameter list was seen in a declaration that was declaring something other than a function. For example, if the return type was accidentally omitted from the declaration.
User Action: Correct the declaration.
funcinit, The declaration of the function "name" includes an initializer.

Description: A function declaration cannot contain an initializer.
User Action: Remove the initializer from the declaration.
funcmem, The member name has a function type.

Description: A struct or union member is declared with function type. This is not valid.
User Action: Correct the member declaration.
funcmixptr, contextfunction types differ because this declaration specifies "type1" and a previous declaration specifies "type2".

Description: A function redeclaration differs from an earlier declaration of the same function because the pointer size of one of the arguments or the return result is different.
User Action: Use the same pointer size for all declarations of the function.
funcnotdef, The function "name" has non-extern storage class, occurs in a context that requires its definition, and has no definition. The storage class has been changed to extern.

Description: In certain modes, the compiler will allow a static function to be declared within the scope of another function. If this function is referenced, then it must also be defined in the compilation unit. If the function is not defined, this message will be output, and the earlier static declaration will be changed to extern.
User Action: Define the static function with compilation unit.
funcnotfunc, In this function definition, "name" has type type instead of a function type.

Description: A function definition does not have a function type. This can occur if the definition did not contain an open/close parenthesis pair.
User Action: Change the definition to specify a function type.
funcredecl, contextfunction types differ because one has no argument information and the other has an ellipsis.

Description: Two function types, used in an operation or a redeclaration of a function, are different because one uses ellipses and the other does not. Older compilers will accept this, but it is not valid ANSI C.
User Action: If used in an operation, a cast should be inserted. If used in a redeclaration, the redeclaration should be removed or modified.
funcstorcls, contexta function has an explicit storage class other than "static" or "extern".

Description: This declaration specifies a storage class that is not valid for a function. If an explicit storage class is used in a function declaration, it must be either static or extern.
User Action: Either remove the storage class specifier, or use one of the valid storage classes.
funcstormod, contexta function cannot have this storage class modifier. Modifier ignored.

Description: A function cannot be declared with this storage class modifier. The only valid storage class modifier for a function declaration is __inline. The modifier is ignored by the compiler.
User Action: Remove the storage class modifier from the function declaration.
funcstrcls, The block-level declaration of the function "name" specifies an explicit storage class other than extern.

Description: A block-level declaration of a function has specified an explicit storage class other than extern. DEC C will change the storage class to extern.
User Action: Either remove the storage-class specifier, or change it to extern.
functypevoid, In this function definition, a typedef void parameter is not strictly ANSI conformant and might not be portable.

Description: The DEC C compiler will accept a function parameter list consisting of only a typedef that has been declared as the void type to be synonymous with a parameter list containing only the void keyword. This is an extension to ANSI C. Other compilers might not compile this program.
User Action: Change the parameter list to use the void keyword.
futurekeywd2, "inline" is expected to be a keyword in the next revision of the ANSI C Standard. Using it as an identifier will prevent your program from conforming to that standard.

Description: The token inline has been selected as a keyword in a future release of the ANSI C Standard. Because the program uses it as an identifier, the program will not conform to that new standard.
User Action: Change the name of the identifier.
futurekeyword, "restrict" is expected to be a keyword in the next revision of the ANSI C Standard. Using it as an identifier will prevent your program from conforming to that standard.

Description: The token restrict has been selected as a keyword in a future release of the ANSI C Standard. Because the program uses it as an identifier, the program will not conform to that new standard.
User Action: Change the name of the identifier.
gblrefinit, The declaration of "name" specifies the globalref storage class and includes an initializer.

Description: A declaration with storage class globalref cannot include an initializer.
User Action: Either remove the initializer or use a storage class that will allow an initializer.
gemargsize, contextthe size of "expression" exceeds the implementation's limit of 2147483647 bytes on the size of a function argument.

Description: The size of a function argument exceeds the DEC C implementation limit.
User Action: Either reduce the size of the argument or consider passing it by reference.
globalext, A storage class of globaldef, globalref, or globalvalue is a language extension.

Description: These storage classes are language extensions of DEC C. Other C compilers might not successfully compile a program that uses the extension.
User Action: These storage classes can be recoded using the more portable #pragma extern model.


Previous Next Contents Index