Jump to 
content
HP.com Home Products and Services Support and Drivers Solutions How to Buy
»  Contact HP

 

HP C

HP C
User's Guide for OpenVMS Systems


Previous Contents Index


Appendix E
HP C Limits

The <float.h> and <limits.h> header files define several macros that expand to various implementation-specific limits and parameters. This appendix contains the contents of these header files for HP C for OpenVMS Systems.

E.1 Contents of <float.h>

The <float.h> header file has the following contents:


#ifndef _LOADED 
#define _LOADED 1 
/**************************************************************************** 
** 
**  <float.h> - Characteristics of floating types 
** 
***************************************************************************** 
**  Header introduced by the ANSI C Standard 
***************************************************************************** 
** 
** Copyright 2001, 2004 Hewlett-Packard Development Company, L.P. 
** 
** Confidential computer software. Valid license from HP required for 
** possession, use or copying. Consistent with FAR 12.211 and 12.212, 
** Commercial Computer Software, Computer Software Documentation, and 
** Technical Data for Commercial Items are licensed to the U.S. Government 
** under vendor's standard commercial license. 
** 
****************************************************************************** 
*/ 
 
#include <decc$types.h> 
#pragma   
#ifdef 
{ 
#endif 
 
 
/* 
**  The following literals and routines are available on OpenVMS for 
**  Alpha, but only after OpenVMS V7.1 or with C++. 
*/ 
#if defined _ANSI_C_SOURCE 
#   if (defined(|| (_VER >= 70100000)) 
 
    /* 
    **  Values for the IEEE Rounding Modes (IEEE ANSI Values) 
    ** 
    **  RZ = Round toward zero (chopped) 
    **  RN = Round toward nearest (default, normal) 
    **  RP = Round toward plus infinity 
    **  RM = Round toward minus infinity 
    */ 
#   define FP_RND_RZ    0 
#   define FP_RND_RN    1 
#   define FP_RND_RP    2 
#   define FP_RND_RM    3 
 
 
    /* 
    ** IEEE Constants 
    */ 
#   ifdef _IEEE_FP 
#      pragma _model 
#      pragma _model _refdef 
       extern double decc$gt_dinfinity; 
       extern double decc$gt_dqnan; 
       extern double decc$gt_dsnan; 
       extern float decc$gs_sinfinity; 
       extern float decc$gs_sqnan; 
       extern float decc$gs_ssnan; 
#      if __X_FLOAT 
#         if (__CRTL_VER >= 60200000) 
             extern long double decc$gx_long_dbl_infinity; 
#         endif 
          extern long double decc$gx_long_dbl_qnan; 
          extern long double decc$gx_long_dbl_snan; 
#      endif 
#      pragma _model 
#      define DBL_INFINITY decc$gt_dinfinity 
#      define LDBL_INFINITY DBL_INFINITY 
#      define DBL_QNAN decc$gt_dqnan 
#      define DBL_SNAN decc$gt_dsnan 
#      define FLT_INFINITY decc$gs_sinfinity 
#      define FLT_QNAN decc$gs_sqnan 
#      define FLT_SNAN decc$gs_ssnan 
#      if __X_FLOAT 
#         if (__CRTL_VER >= 60200000) 
#           define LDBL_INFINITY decc$gx_long_dbl_infinity 
#         else 
#           define LDBL_INFINITY DBL_INFINITY 
#         endif 
#         define LDBL_QNAN  decc$gx_long_dbl_qnan 
#         define LDBL_SNAN  decc$gx_long_dbl_snan 
#      else 
#          define LDBL_INFINITY DBL_INFINITY 
#          define LDBL_QNAN DBL_QNAN 
#          define LDBL_SNAN DBL_SNAN 
#      endif 
#   endif 
    /* 
    ** Macros to get decc$ names 
    */ 
#   if (_VER < 70100000) 
#      define write_rnd($write_rnd(
#      define read_rnd decc$read_rnd 
#   endif 
 
 
    /* 
    ** Functions to read and write floating point rounding mode 
    */ 
    unsigned int write_rnd(unsigned int 
_rnd(void); 
 
#   endif 
#endif 
 
 
/* 
**  Rounding mode for floating point addition: 
*/ 
#ifdef _FLT_ROUNDS 
#  define FLT_ROUNDS (_FLT_ROUNDS-1) /* use compiler generated 
                                                             value, if present */ 
#else 
#  define FLT_ROUNDS 1   
#endif 
 
 
/* 
**  Radix of exponent representation: 
*/ 
#define FLT_RADIX 2 
 
 
/* 
**  Number of FLT_RADIX digits in the mantissa including the hidden bit: 
*/ 
#define _FLT_MANT_DIG    24 
#define _DBL_MANT_DIG    53 
#ifdef 
#define _FLT_MANT_DIG    24 
#define _FLT_MANT_DIG    53 
#define _FLT_MANT_DIG    113 
#endif 
 
 
/* 
**  Number of decimal digits of precision: 
*/ 
#define _FLT_DIG         6 
#define _FLT_DIG         15 
#ifdef 
#define _FLT_DIG         6 
#define _FLT_DIG         15 
#define _FLT_DIG         33 
#endif 
 
 
/* 
**  Minimum negative integer such that FLT_RADIX raised to that power 
**  minus 1 is a normalized floating-point number: 
*/ 
#define _FLT_MIN_EXP     (-127) 
#define _FLT_MIN_EXP     (-1023) 
#ifdef 
#define _FLT_MIN_EXP     (-125) 
#define _FLT_MIN_EXP     (-1021) 
#define _FLT_MIN_EXP     (-16381) 
#endif 
 
 
/* 
**  Minimum negative integer such that 10 raised to that power is in the 
**  range of normalized floating-point numbers: 
*/ 
#define _FLT_MIN_10_EXP  (-38) 
#define _FLT_MIN_10_EXP  (-308) 
#ifdef 
#define _FLT_MIN_10_EXP  (-37) 
#define _FLT_MIN_10_EXP  (-307) 
#define _FLT_MIN_10_EXP  (-4931) 
#endif 
 
 
/* 
**  Maximum integer such that FLT_RADIX raised to that power minus 1 is a 
**  representable finite floating point number: 
*/ 
#define _FLT_MAX_EXP     127 
#define _FLT_MAX_EXP     1023 
#ifdef 
#define _FLT_MAX_EXP     128 
#define _FLT_MAX_EXP     1024 
#define _FLT_MAX_EXP     16384 
#endif 
 
 
/* 
**  Maximum integer such that 10 raised to that power is in the range of 
**  representable finite floating-point numbers: 
*/ 
#define _FLT_MAX_10_EXP  38 
#define _FLT_MAX_10_EXP  307 
#ifdef 
#define _FLT_MAX_10_EXP  38 
#define _FLT_MAX_10_EXP  308 
#define _FLT_MAX_10_EXP  4932 
#endif 
 
 
/* 
**  Maximum representable finite floating-point number: 
*/ 
#define _FLT_MAX         1.7014117e+38f 
#define _FLT_MAX         8.98846567431157854e+307 
#ifdef 
#define _FLT_MAX         3.40282347e+38f 
#define _FLT_MAX         1.79769313486231570e+308 
#define _FLT_MAX         1.189731495357231765085759326628007016196477e4932l 
#endif 
 
 
/* 
**  The difference between 1.0 and the least value greater than 1.0 that 
**  is representable in the given floating-point type 
**    (i.e. 1.0 + epsilon != 1.0): 
*/ 
#define _FLT_EPSILON     ((float)(1.0 / (1 << 23))) 
#define _FLT_EPSILON     (1.0 / (1 << 30) / (1 << 22)) 
#ifdef 
#define _FLT_EPSILON     1.19209290e-07f 
#define _FLT_EPSILON     2.2204460492503131e-16 
#define _FLT_EPSILON     1.9259299443872358530559779425849273185381e-34l 
#endif 
 
 
/* 
**  Minimum normalized positive floating-point number: 
*/ 
#define _FLT_MIN         ((float) 2.93873587705571877e-39) 
#define _FLT_MIN         5.56268464626800346e-309 
#ifdef 
#define _FLT_MIN         1.17549435e-38f 
#define _FLT_MIN         2.2250738585072014e-308 
#define _FLT_MIN     ((long double) 
                                     3.3621031431120935062626778173217526025981e-4932l) 
#endif 
 
 
/* 
**  Define the FLT values to be either the 
*/ 
#if _FLOAT 
#   define FLT_MANT_DIG     _FLT_MANT_DIG 
#   define FLT_DIG          _FLT_DIG 
#   define FLT_MIN_EXP      _FLT_MIN_EXP 
#   define FLT_MIN_10_EXP   _FLT_MIN_10_EXP 
#   define FLT_MAX_EXP      _FLT_MAX_EXP 
#   define FLT_MAX_10_EXP   _FLT_MAX_10_EXP 
#   define FLT_MAX          _FLT_MAX 
#   define FLT_EPSILON      _FLT_EPSILON 
#   define FLT_MIN          _FLT_MIN 
#else 
#   define FLT_MANT_DIG     _FLT_MANT_DIG 
#   define FLT_DIG          _FLT_DIG 
#   define FLT_MIN_EXP      _FLT_MIN_EXP 
#   define FLT_MIN_10_EXP   _FLT_MIN_10_EXP 
#   define FLT_MAX_EXP      _FLT_MAX_EXP 
#   define FLT_MAX_10_EXP   _FLT_MAX_10_EXP 
#   define FLT_MAX          _FLT_MAX 
#   define FLT_EPSILON      _FLT_EPSILON 
#   define FLT_MIN          _FLT_MIN 
#endif 
 
 
/* 
**  Define the DBL values to be either the 
*/ 
#if _FLOAT 
#   define DBL_MANT_DIG     _FLT_MANT_DIG 
#   define DBL_DIG          _FLT_DIG 
#   define DBL_MIN_EXP      _FLT_MIN_EXP 
#   define DBL_MIN_10_EXP   _FLT_MIN_10_EXP 
#   define DBL_MAX_EXP      _FLT_MAX_EXP 
#   define DBL_MAX_10_EXP   _FLT_MAX_10_EXP 
#   define DBL_MIN          _FLT_MIN 
#elif _FLOAT 
#   define DBL_MANT_DIG     _DBL_MANT_DIG 
#   define DBL_DIG          _FLT_DIG 
#   define DBL_MIN_EXP      _FLT_MIN_EXP 
#   define DBL_MIN_10_EXP   _FLT_MIN_10_EXP 
#   define DBL_MAX_EXP      _FLT_MAX_EXP 
#   define DBL_MAX_10_EXP   _FLT_MAX_10_EXP 
#   define DBL_MIN          _FLT_MIN 
#else 
#   define DBL_MANT_DIG     56 
#   define DBL_DIG          16 
#   define DBL_MIN_EXP      _FLT_MIN_EXP 
#   define DBL_MIN_10_EXP   _FLT_MIN_10_EXP 
#   define DBL_MAX_EXP      _FLT_MAX_EXP 
#   define DBL_MAX_10_EXP   _FLT_MAX_10_EXP 
#   define DBL_MIN          2.93873587705571877e-39 
#endif 
 
 
#if _FLOAT 
#   define DBL_MAX          _FLT_MAX 
#elif _FLOAT 
#   define DBL_MAX          _FLT_MAX 
#else 
#   ifndef 
#       define DBL_MAX      1.70141183460469229e+38 
#   else 
#       define DBL_MAX      1.70141183460469213e+38      
#   endif 
#endif 
 
 
#if _FLOAT 
#   define DBL_EPSILON      _FLT_EPSILON 
#elif _FLOAT || (_FLOAT && defined(
#   define DBL_EPSILON      (1.0 / (1 << 20) / (1 << 16) / (1 << 16)) 
#else 
#   define DBL_EPSILON      (1.0 / (1 << 23) / (1 << 16) / (1 << 16)) 
#endif 
 
 
/* 
**  Define the LDBL values based on _FLOAT 
*/ 
#if _FLOAT 
#   define LDBL_MANT_DIG    _FLT_MANT_DIG 
#   define LDBL_DIG         _FLT_DIG 
#   define LDBL_MIN_EXP     _FLT_MIN_EXP 
#   define LDBL_MIN_10_EXP  _FLT_MIN_10_EXP 
#   define LDBL_MAX_EXP     _FLT_MAX_EXP 
#   define LDBL_MAX_10_EXP  _FLT_MAX_10_EXP 
#   define LDBL_MAX         _FLT_MAX 
#   define LDBL_EPSILON     _FLT_EPSILON 
#   define LDBL_MIN         3.3621031431120935062626778173217526025981e-4932l 
#else 
#   define LDBL_MANT_DIG    DBL_MANT_DIG 
#   define LDBL_DIG         DBL_DIG 
#   define LDBL_MIN_EXP     DBL_MIN_EXP 
#   define LDBL_MIN_10_EXP  DBL_MIN_10_EXP 
#   define LDBL_MAX_EXP     DBL_MAX_EXP 
#   define LDBL_MAX_10_EXP  DBL_MAX_10_EXP 
#   define LDBL_MAX         DBL_MAX 
#   define LDBL_EPSILON     DBL_EPSILON 
#   define LDBL_MIN         DBL_MIN 
#endif 
 
#ifdef 
} 
#endif 
 
#pragma 
#endif /* _LOADED */ 
 

E.2 Contents of <limits.h>

The <limits.h> header file has the following contents:


#ifndef _LOADED 
#define _LOADED 1 
/**************************************************************************** 
** 
**  <limits.h> - Sizes of integral types 
** 
***************************************************************************** 
**  Header introduced by the ANSI C Standard 
***************************************************************************** 
** 
** Copyright 2001, 2004 Hewlett-Packard Development Company, L.P. 
** 
** Confidential computer software. Valid license from HP required for 
** possession, use or copying. Consistent with FAR 12.211 and 12.212, 
** Commercial Computer Software, Computer Software Documentation, and 
** Technical Data for Commercial Items are licensed to the U.S. Government 
** under vendor's standard commercial license. 
** 
****************************************************************************** 
**                                  Note 
****************************************************************************** 
** 
**  Section 2.2.4.2 of the Rationale states "The limits for the maxima and 
**  minima of unsigned types are specified as unsigned constants..." 
** 
**  The alert reader will notice there are no minima for the unsigned types, 
**  but we will follow the Rationale's advice anyway. 
** 
****************************************************************************** 
**                           Implementors Note 
****************************************************************************** 
** 
**  Some constants in this file such as INT_MIN is defined in terms of an 
**  expression involving an INT_MAX which is a constant value.  Please do 
**  not be tempted to speed processing up by evaluating those expressions 
**  into constant values.  This will cause things to not work correctly. 
****************************************************************************** 
*/ 
 
#include <decc$types.h> 
#pragma   
* 
**  Number of bits for the smallest object that is not a bit-field (byte) 
*/ 
#define   CHAR_BIT    8 
 
 
/* 
**  Minimum and maximum values for "signed/unsigned char" 
*/ 
#define   UCHAR_MAX   255u 
#define   SCHAR_MAX   127 
#define   SCHAR_MIN   (-SCHAR_MAX - 1) 
 
 
/* 
**  Minimum and maximum values for "char" affected by /unsigned_char qualifier 
*/ 
#ifdef _CHAR 
#define   CHAR_MIN    0 
#define   CHAR_MAX    UCHAR_MAX 
#else 
#define   CHAR_MIN    SCHAR_MIN 
#define   CHAR_MAX    SCHAR_MAX 
#endif 
 
 
/* 
**  Minimum and maximum values for "signed/unsigned short int" 
*/ 
#define   USHRT_MAX   65535u 
#define   SHRT_MAX    32767 
#define   SHRT_MIN    (-SHRT_MAX - 1) 
 
 
/* 
**  Minimum and maximum values for "signed/unsigned int" 
*/ 
#define   UINT_MAX    4294967295u 
#define   INT_MAX     2147483647 
#define   INT_MIN     (-INT_MAX - 1) 
 
 
/* 
**  Minimum and maximum values for "signed/unsigned long int" 
*/ 
#define   ULONG_MAX   4294967295u 
#define   LONG_MAX    2147483647 
#define   LONG_MIN    (-LONG_MAX - 1) 
 
 
/* 
**  Minimum and maximum values for "signed/unsigned 
*/ 
#define _MAX  65535u 
#define _MAX   32767 
#define _MIN   (-_MAX - 1) 
 
#define _MAX  4294967295u 
#define _MAX   2147483647 
#define _MIN   (-_MAX - 1) 
 
 
#ifdef 
#define _MAX  18446744073709551615u 
#define _MAX   9223372036854775807 
#define _MIN   (-_MAX - 1) 
#endif 
 
#if _VER < 60200000 
#   define  MB_LEN_MAX               1   /*  Before OpenVMS V6.2  */ 
#else 
#   define  MB_LEN_MAX               8   /*  After  OpenVMS V6.2  */ 
#endif 
 
/* 
**  Limits which changed beginning with OpenVMS V6.2 
*/ 
#   if defined(_XOPEN_SOURCE) || !defined(_ANSI_C_SOURCE) 
#   define  COLL_WEIGHTS_MAX         5   /*  Max collate weights  */ 
#   define  NL_TEXTMAX            8192 
#   define  NL_SETMAX            65535 
#   define  NL_MSGMAX            65535 
#   define  CHARCLASS_NAME_MAX      14 
#   define  NL_ARGMAX                9 
#   define  NL_LANGMAX              14 
#   define  TZNAME_MAX              15 
#   define  SSIZE_MAX          INT_MAX 
 
    /* 
    ** Limits needed to support *conf() functions. 
    */ 
#   define  BC_BASE_MAX    -1    /* Max ibase and obase values 
                                 ** for bc not implemented */ 
#   define  BC_DIM_MAX     -1    /* Max num elements in array 
                                 ** for bc not implemented */ 
#   define  BC_SCALE_MAX   -1    /* Max scale value allowed by 
                                 ** bc not implemented */ 
#   define  BC_STRING_MAX  -1    /* Max len of string constant 
                                 ** by bc not implemented */ 
 
#   define  EXPR_NEST_MAX  (-1)  /* Max num expression nested 
                                    for expr */ 
#   define  LINE_MAX       (-1)  /* Max len of utility input 
                                 ** line */ 
#   define  RE_DUP_MAX     (-1)  /* Max num repeated reg for 
                                 ** interval */ 
 
#   define  NGROUPS_MAX    0     /* User can be in no extra groups */ 
#   define  PASS_MAX       31    /* Max bytes in a password */ 
#   define  ARG_MAX        4096  /* Max len of arg to exec rtns */ 
 
    /* 
    **  These are used by pathconf() as well as others 
    */ 
#   define  LINK_MAX   1      /* Only 1 link to a file */ 
#   define  MAX_CANON  511    /* Max bytes in terminal canonical 
                              ** input */ 
#   define  MAX_INPUT  511    /* Max bytes required as input 
                              ** before reading */ 
#   define  NAME_MAX   255    /* Max bytes in filename */ 
#   define  PATH_MAX   255    /* Max bytes in pathname */ 
#   define  PIPE_BUF   512    /* Max atomic bytes on write to pipe */ 
 
    /*  
    **  New limits with DEC C V5.2 
    */  
#   define _POSIX_PIPE_BUF            512 
 
#endif /* XOPEN_SOURCE */ 
 
#if defined(_XOPEN_SOURCE_EXTENDED) || !defined(_ANSI_C_SOURCE) 
#   define  ATEXIT_MAX   32767 /* Max number of functions that 
                               ** may be registered with atexit().  
                               ** essentially unlimited 
                               */ 
#   define  IOV_MAX      (-1)  /* Maximum number of iovec 
                               ** structures that one process 
                               ** has available for use with 
                               ** readv() or writev() */ 
#endif 
 
 
 
/* 
**  Macros defined by the POSIX 1003.1c-1995 formally approved at 
**  the June 1995 meeting of the IEEE Standards Board.  The correct 
**  feature test macro for strictly conforming POSIX 1003.1c-1995 
**  applications is: 
** 
**      #define _POSIX_C_SOURCE 199506L 
*/ 
#if _POSIX_C_SOURCE >= 199506 || !defined _ANSI_C_SOURCE 
 
#   ifndef _POSIX_THREAD_DESTRUCTOR_ITERATIONS   
#      define _POSIX_THREAD_DESTRUCTOR_ITERATIONS   4 
#   endif 
 
#   ifndef _POSIX_THREAD_KEYS_MAX                
#      define _POSIX_THREAD_KEYS_MAX                128 
#   endif 
 
#   ifndef _POSIX_THREAD_THREADS_MAX             
#      define _POSIX_THREAD_THREADS_MAX             64 
#   endif 
 
#   ifndef PTHREAD_DESTRUCTOR_ITERATIONS         
#      define PTHREAD_DESTRUCTOR_ITERATIONS         
                                _POSIX_THREAD_DESTRUCTOR_ITERATIONS 
#   endif 
 
#   ifndef PTHREAD_KEYS_MAX 
#      define PTHREAD_KEYS_MAX              255 
#   endif 
 
#   ifndef PTHREAD_STACK_MIN                 
#      if defined 
#         define PTHREAD_STACK_MIN                  8192 
#      else 
#         define PTHREAD_STACK_MIN                  1024 
#      endif 
#   endif 
 
#endif /* _POSIX_C_SOURCE >= 199506 */ 
 
#pragma 
#endif /* _LOADED */ 


Glossary


additive operator: An operator that performs addition (+) or subtraction (--). These operators perform arithmetic conversion on each of the operands, if necessary. See also arithmetic conversion rules.

aggregate: A data structure (array, structure, or union) composed of segments called members. You declare the members to be of either a scalar or aggregate data type. Members of an array are called elements and must be of the same data type. A structure has named members that can be of different data types. A union is a structure that is as long as its longest declared member and that contains the value of only one member at a time.

ampersand (&): As a unary operator, computes the address of its operand. As a binary operator, performs a bitwise AND on two operands; both must be of an integral type. As an assignment operator (&=), performs a bitwise AND on two expressions and assigns the result to the left object. The double ampersand (&&), a binary operator, performs a logical AND on two operands. See also binary operator, bitwise operator, logical operator, and unary operator.

argument: An expression that appears within the parentheses of a function call. The expression is evaluated and the result is copied into the corresponding parameter of the called function. See also argument passing and parameter.

argument passing: The mechanism by which the value of the argument in a function call is copied to a parameter in the called function. In C, all arguments are passed by value; that is, the parameter receives a copy of the argument's value. Therefore, a function called in C cannot modify the value of an argument except by using its address. In general, addresses are passed using the ampersand operator (see ampersand (&)) in the function call or by passing a pointer variable. In addition, using an array or function name (an array with no brackets or function identifier with no parentheses) as an argument results in the passing of the address of the array or function.

arithmetic conversion rules: The set of rules that govern the changing of a value of an operand from one data type to another in arithmetic expressions. Conversions take place in assignments by changing the type of the right operand's result to that of the object referred to by the left operand; the resultant type also applies to the assignment expression. Conversions are also performed when arguments are passed to functions.

arithmetic operator: A C operator that performs a mathematical operation. In an expression, certain operations take precedence (are performed first) over other operations. The unary minus operator (--) is at the highest level of precedence. At the next level are the binary operators for multiplication (*), division (/), and mod (%). At the next level are addition (+) and subtraction (--). There is no unary plus operator, and there is no exponentiation operator. If necessary, all the binary operators perform the arithmetic conversions on their operands. See also arithmetic conversion rules.

arithmetic type: One of the integral data types, enumerated types, float, or double.

array: An aggregate data type consisting of subscripted members, called elements, all of the same type. Elements of an array can be one of the fundamental types or can be structures, unions, or other arrays (to form multidimensional arrays).

assignment expression: An expression that has the following form:

E1 asgnop E2 

Expression E1 must evaluate to an lvalue, the asgnop operator is an assignment operator, and E2 is an expression. The type of an assignment expression is that of its left operand. The value of an assignment expression is that of the left operand after the assignment takes place. If the operator is of the form op=, then the operation E1 op (E2) is performed, and the result is assigned to the object referred to by E1; E1 is evaluated once.

assignment operator: The combination of an arithmetic or bitwise operator with the assignment symbol (=); also, the assignment symbol by itself. See also assignment expression.

asterisk (*): As a unary operator, treats its operand as an address and results in the contents of that address. As a binary operator, multiplies two operands, performing the arithmetic conversions, if necessary. As an assignment operator (*=), multiplies an expression by the value of the object referred to by the left operand, and assigns the product to that object. See also binary operator and unary operator.

binary operator: An operator that is placed between two operands. The binary operators include arithmetic operators, shift operators, relational operators, equality operators, bitwise operators (AND, OR, and XOR), logical connectives, and the comma operator, in that order of precedence. All binary operators group from left to right. HP C has no exponentiation operator. The exp library function must be used instead.

bitwise operator: An operator that performs Boolean algebra on the binary values of two operands, which must be integral. If necessary, the operators perform the arithmetic conversions. Both operands are evaluated. All bitwise operators are associative, and expressions using them may be rearranged. The operators include, in order of precedence, the single ampersand (&) (bitwise AND), the circumflex (^) (bitwise exclusive OR), and the single bar (|) (bitwise inclusive OR).

block: See compound statement.

block activation: The run-time activation of a block or function, in which local auto and register variables are allocated storage and, if they are declared with initializers, given initial values. Variables of storage class static, extern, globaldef, and globalvalue are allocated and initialized at link time. The block activation precedes the execution of any executable statements in the function or block. Functions are activated when they are called. Internal blocks (compound statements) are activated when the program control flows into them. Internal blocks are not activated if they are entered by a goto statement, unless the goto target is the label of the block rather than the label of some statement within the block. If a block is entered by a goto statement, references to auto and register variables declared in the block are still valid references, but the variables may not be properly initialized. Blocks that make up the body of a switch statement are not activated; auto or register variables declared in the block are not initialized.

built-in functions: The function definitions that are part of the HP C compiler for OpenVMS systems. A call to one of these functions does not call a function in a run-time library or in your program. Most of the built-in functions access the VAX hardware instructions to perform operations quickly that are cumbersome, slow, or impossible in the C language.

cast: An expression preceded by a cast operator of the form (type_name). The cast operator forces the conversion of the evaluated expression to the given type. The expression is assigned to a variable of the specified type, which is then used in place of the whole construction. The cast operator has the same precedence as the other unary operators.

CDD/Repository: An optional OpenVMS software product, available under a separate license, that maintains a set of data structure definitions that many programs on a system, written in many languages, can access. The language-independent definitions are translated into the target language when they are included in the program stream. You can include the CDD records in HP C programs using the #dictionary preprocessor directive. This directive is specific to HP C for OpenVMS Systems, and is not portable.

character:

  • A member of the ASCII character set.
  • An object of type char, which is stored in a single byte of memory. An object of type char always represents a single character, not a string.
  • A constant of type char consisting of up to four ASCII characters enclosed in apostrophes (' ') not quotation marks (" ").

See also string.

comma operator: A C operator used to separate two expressions as follows:

E1, E2 

The expressions E1 and E2 are evaluated left to right, and the value of E1 is discarded. The type and value of the comma expression are those of E2.

comment: A sequence of characters introduced by the pair /* and terminated by */. Comments are ignored during compilation. They may not be nested.

Common Data Dictionary (CDD): See CDD/Repository.

compilation unit: All the source files compiled to form a single object module. In other C documentation, the term source file is synonymous with the OpenVMS compilation unit, which is not necessarily a single source file. Declarations and definitions within a compilation unit determine the lexical scope of functions and variables.

compound statement: Valid C statements enclosed in braces ({ }). Compound statements can also include declarations. The scope of these variables is local to the compound statement. A compound statement, when it is not the body of a function, is called a block.

conditional operator: The C operator (?:), which is used in conditional expressions of the following form:

E1 ? E2 : E3 

E1, E2, and E3 are valid C expressions. E1 is evaluated, and if it is nonzero, the result is the value of E2; otherwise, the result is the value of E3. Either E2 or E3 is evaluated, but not both.

constant: A primary expression whose value does not change. A constant may be literal or symbolic.

constant expression: An expression involving only constants. Constant expressions are evaluated at compile time so they may be used wherever a constant is valid.

conversion: The changing of a value from one data type to another. Conversions take place in assignments by changing the type of the right operand's result to that of the object referred to by the left operand; the resultant type also applies to the assignment expression. Conversions are also performed when arguments are passed to functions: char and short become int; unsigned char and unsigned short become unsigned int if no function prototype is in scope; float becomes double. Conversions can also be forced by means of a cast. Conversions are performed on operands in arithmetic expressions by the arithmetic conversions.

conversion characters: A character used with the HP C RTL Standard I/O functions that is preceded by a percent sign (%) and specifies an input or output format. For example, letter d instructs the function to input/output the value in a decimal format.


Previous Next Contents Index

Privacy statement Using this site means you accept its terms
© 2007 Hewlett-Packard Development Company, L.P.