home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / TCPP30-3.ZIP / DOC.ZIP / ANSI.DOC next >
Text File  |  1992-02-18  |  23KB  |  539 lines

  1.               ANSI IMPLEMENTATION-SPECIFIC STANDARDS
  2.               --------------------------------------
  3.  
  4. Certain aspects of the ANSI C standard are not defined exactly by ANSI. 
  5. Instead, each implementor of a C compiler is free to define these aspects 
  6. individually. This chapter tells how Borland has chosen to define these 
  7. implementation-specific standards. The section numbers refer to the 
  8. February 1990 ANSI Standard. Remember that there are differences between 
  9. C and C++; this appendix addresses C only.
  10.  
  11. 2.1.1.3  How to identify a diagnostic.
  12.  
  13.   When the compiler runs with the correct combination of options, any
  14.   message it issues beginning with the words Fatal, Error, or Warning
  15.   are diagnostics in the sense that ANSI specifies. The options needed
  16.   to insure this interpretation are in the following table. The options are 
  17.   listed as hot keys you use in the IDE. For example, the first option 
  18.   corresponds to Options|Compiler|Source, and in the Source Options 
  19.   dialog box you'd choose ANSI for the Keyword option.
  20.  
  21.   -----------------------------------------------------------------------------
  22.   Option       Action
  23.   -----------------------------------------------------------------------------
  24.   O|C|S|A      Enable only ANSI keywords.
  25.   O|C|S|N      No nested comments allowed.
  26.   O|C|E|C      Use C calling conventions.
  27.   O|C|S|I      At least 32 significant characters in identifiers.
  28.   O|C|M|D|S    Turn off all warnings except selected ones.
  29.   O|C|M|A|I    Turn on warning about inappropriate initializers.
  30.   O|C|M|P|C    Turn on warning about non-portable pointer comparisons.
  31.   O|C|M|A|R    Turn on warning about duplicate non-identical definitions.
  32.   O|C|M|A|S    Turn on warning about suspicious pointer conversion.
  33.   O|C|P|N      Turn on warning about non-portable pointer conversion.
  34.   O|C|M|A|V    Turn on warning about void functions returning a value.
  35.   O|C|M|A|H    Turn on warning about hexadecimal values containg more than
  36.                3 digits.
  37.   O|C|M|P|M    Turn on warning about mixing pointers to signed and unsigned 
  38.                char.
  39.   O|C|M|A|U    Turn on warning about undefined structures.
  40.   O|C|M|A|X    Turn on warning about variables declared both as external and 
  41.                as static.
  42.   -----------------------------------------------------------------------------
  43.   Choose Options|Compiler|Code Generation and specify Never under SS = DS.
  44.   Also don't change the default values in the Segment Names dialog box under
  45.   Options|Compiler|Names; each text box should contain an asterisk (*).
  46.  
  47.   Other options not specifically mentioned here can be set to whatever
  48.   you desire.
  49.  
  50. 2.1.2.2.1  The semantics of the arguments to main.
  51.  
  52.   The value of argv[0] is a pointer to a null byte when the program is
  53.   run on DOS versions prior to version 3.0. For DOS version 3.0 or
  54.   later, argv[0] points to the program name.
  55.  
  56.   The remaining argv strings point to each component of the DOS
  57.   command-line arguments. Whitespace separating arguments is removed,
  58.   and each sequence of contiguous nonwhitespace characters is treated
  59.   as a single argument. Quoted strings are handled correctly (that is,
  60.   as one string containing spaces).
  61.  
  62. 2.1.2.3  What constitutes an interactive device.
  63.  
  64.   An interactive device is any device that looks like the console.
  65.  
  66. 2.2.1  The collation sequence of the execution character set.
  67.  
  68.   The collation sequence for the execution character set uses the
  69.   signed value of the character in ASCII.
  70.  
  71. 2.2.1  Members of the source and execution character sets.
  72.  
  73.   The source and execution character sets are the extended ASCII set
  74.   supported by the IBM PC. Any character other than ^Z (Control-Z)
  75.   can appear in string literals, character constants, or comments.
  76.  
  77. 2.2.1.2  Multibyte characters.
  78.  
  79.   No multibyte characters are supported in Turbo C++.
  80.  
  81. 2.2.2  The direction of printing.
  82.  
  83.   Printing is from left-to-right, the normal direction for the PC.
  84.  
  85. 2.2.4.2  The number of bits in a character in the execution character set.
  86.  
  87.   There are 8 bits per character in the execution character set.
  88.  
  89. 3.1.2  The number of significant initial characters in identifiers.
  90.  
  91.   The first 32 characters are significant, although you can use a
  92.   O|C|S|I to change that number. Both internal and external identifiers use 
  93.   the same number of significant digits. (The number of significant characters 
  94.   in C++ identifiers is unlimited.)
  95.  
  96. 3.1.2  Whether case distinctions are significant in external identifiers.
  97.  
  98.   The compiler will normally force the linker to distinguish between
  99.   uppercase and lowercase. You can use suppress this distinction with
  100.   O|L|S|C to uncheck the Case-sensitive Link option.
  101.  
  102. 3.1.2.5  The representations and sets of values of the various types of 
  103. integers.
  104.  
  105.   ------------------------------------------------------------------------
  106.   Type                    Minimum value                      Maximum value
  107.   ------------------------------------------------------------------------
  108.   signed char                      -128                               127
  109.   unsigned char                       0                               255
  110.   signed short                  -32,768                            32,767
  111.   unsigned short                      0                            65,535
  112.   signed int                    -32,768                            32,767
  113.   unsigned int                        0                            65,535
  114.   signed long            -2,147,483,648                     2,147,483,647
  115.   unsigned long                       0                     4,294,967,295
  116.  
  117.   All char types use one 8-bit byte for storage.
  118.  
  119.   All short and int types use 2 bytes.
  120.  
  121.   All long types use 4 bytes.
  122.  
  123.   If alignment is requested (O|C|C|W), all nonchar integer type objects will
  124.   be aligned to even byte boundaries. Character types are never aligned.
  125.  
  126. 3.1.2.5  The representations and sets of values of the various types of 
  127. floating-point numbers.
  128.  
  129.   The IEEE floating-point formats as used by the Intel 8087 are used for all 
  130.   Turbo C++ floating-point types. The float type uses 32-bit 
  131.   IEEE real format. The double type uses 64-bit IEEE real format. The long
  132.   double type uses 80-bit IEEE extended real format.
  133.  
  134. 3.1.3.4  The mapping between source and execution character sets.
  135.  
  136.   Any characters in string literals or character constants will remain
  137.   unchanged in the executing program. The source and execution character
  138.   sets are the same.
  139.  
  140. 3.1.3.4  The value of an integer character constant that contains a character 
  141. or escape sequence not represented in the basic execution character set or 
  142. the extended character set for a wide character constant.
  143.  
  144.   Wide characters are not supported. They are treated as normal characters. 
  145.   All legal escape sequences map onto one or another character. If a hex or 
  146.   octal escape sequence is used that exceeds the range of a character, the 
  147.   compiler issues a message.
  148.  
  149. 3.1.3.4  The current locale used to convert multibyte characters into 
  150. corresponding wide characters for a wide character constant.
  151.  
  152.   Wide character constants are recognized, but treated in all ways like
  153.   normal character constants. In that sense, the locale is the "C" locale.
  154.  
  155. 3.1.3.4  The value of an integer constant that contains more than one 
  156. character, or a wide character constant that contains more than one multibyte 
  157. character.
  158.  
  159.   Character constants can contain one or two characters. If two characters are 
  160.   included, the first character occupies the low-order byte of the constant, 
  161.   and the second character occupies the high-order byte.
  162.  
  163. 3.2.1.2  The result of converting an integer to a shorter signed integer, or 
  164. the result of converting an unsigned integer to a signed integer of equal 
  165. length, if the value cannot be represented.
  166.  
  167.   These conversions are performed by simply truncating the high-order
  168.   bits. Signed integers are stored as 2's-complement values, so the resulting 
  169.   number is interpreted as such a value. If the high-order bit of the smaller 
  170.   integer is nonzero, the value is interpreted as a negative value; otherwise, 
  171.   it is positive.
  172.  
  173. 3.2.1.3  The direction of truncation when an integral number is converted 
  174. to a floating-point number that cannot exactly represent the original value.
  175.  
  176.   The integer value is rounded to the nearest representable value. Thus,
  177.   for example, the long value (2 to the 31th power minus 1) is converted to 
  178.   the float value 2 to the 31th power. Ties are broken according to the rules 
  179.   of IEEE standard arithmetic.
  180.  
  181. 3.2.1.4  The direction of truncation or rounding when a floating-point number
  182. is converted to a narrower floating-point number.
  183.  
  184.   The value is rounded to the nearest representable value. Ties are broken 
  185.   according to the rules of IEEE standard arithmetic.
  186.  
  187. 3.3  The results of bitwise operations on signed integers.
  188.  
  189.   The bitwise operators apply to signed integers as if they were their
  190.   corresponding unsigned types. The sign bit is treated as a normal data
  191.   bit. The result is then interpreted as a normal 2's complement signed
  192.   integer.
  193.  
  194. 3.3.2.3  What happens when a member of a union object is accessed using a
  195. member of a different type.
  196.  
  197.   The access is allowed and will simply access the bits stored there.
  198.   You'll need a detailed understanding of the bit encodings of floating-point 
  199.   values in order to understand how to access a floating-type member using a 
  200.   different member. If the member stored is shorter than the member used to 
  201.   access the value, the excess bits have the value they had before the short 
  202.   member was stored.
  203.  
  204. 3.3.3.4  The type of integer required to hold the maximum size of an array.
  205.  
  206.   For a normal array, the type is unsigned int, and for huge arrays the
  207.   type is signed long.
  208.  
  209. 3.3.4  The result of casting a pointer to an integer or vice versa.
  210.  
  211.   When converting between integers and pointers of the same size, no
  212.   bits are changed. When converting from a longer type to a shorter, the
  213.   high-order bits are truncated. When converting from a shorter integer
  214.   type to a longer pointer type, the integer is first widened to an
  215.   integer type that is the same size as the pointer type. Thus signed
  216.   integers will sign-extend to fill the new bytes. Similarly, smaller
  217.   pointer types being converted to larger integer types will first be
  218.   widened to a pointer type that is as wide as the integer type.
  219.  
  220. 3.3.5 The sign of the remainder on integer division.
  221.  
  222.   The sign of the remainder is negative when only one of the operands is
  223.   negative. If neither or both operands are negative, the remainder is
  224.   positive.
  225.  
  226. 3.3.6  The type of integer required to hold the difference between two
  227. pointers to elements of the same array, ptrdiff_t.
  228.  
  229.   The type is signed int when the pointers are near, or signed long when 
  230.   the pointers are far or huge. The type of ptrdiff_t depends on the memory 
  231.   model in use. In small data models, the type is int. In large data models, 
  232.   the type is long.
  233.  
  234. 3.3.7  The result of a right shift of a negative signed integral type.
  235.  
  236.   A negative signed value is sign-extended when right shifted.
  237.  
  238. 3.5.1  The extent to which objects can actually be placed in registers by
  239. using the register storage-class specifier.
  240.  
  241.   Objects declared with any two-byte integer or pointer types can be placed 
  242.   in registers. The compiler will place any small auto objects into registers, 
  243.   but objects explicitly declared as register will take precedence. At least 
  244.   two and as many as six registers are available. The number of registers 
  245.   actually used depends on what registers are needed for temporary values 
  246.   in the function.
  247.  
  248. 3.5.2.1  Whether a plain int bit-field is treated as a signed int or as an 
  249. unsigned int bit field.
  250.  
  251.   Plain int bit fields are treated as signed int bit fields.
  252.  
  253. 3.5.2.1  The order of allocation of bit fields within an int.
  254.  
  255.   Bit fields are allocated from the low-order bit position to the high-order.
  256.  
  257. 3.5.2.1  The padding and alignment of members of structures.
  258.  
  259.   By default, no padding is used in structures. If you use the alignment
  260.   option (O|C|C|W), structures are padded to even size, and any members that
  261.   do not have character or character array type will be aligned to an even 
  262.   offset.
  263.  
  264. 3.5.2.1  Whether a bit-field can straddle a storage-unit boundary.
  265.  
  266.   When alignment (O|C|C|W) is not requested, bit fields can straddle word
  267.   boundaries, but will never be stored in more than two adjacent bytes.
  268.  
  269. 3.5.2.2  The integer type chosen to represent the values of an enumeration
  270. type.
  271.  
  272.   If all enumerators can fit in an unsigned char, that is the type
  273.   chosen. Otherwise, the type is signed int.
  274.  
  275. 3.5.3  What constitutes an access to an object that has volatile-qualified 
  276. type.
  277.  
  278.   Any reference to a volatile object will access the object. Whether
  279.   accessing adjacent memory locations will also access an object depends on 
  280.   how the memory is constructed in the hardware. For special device memory, 
  281.   like video display memory, it depends on how the device is constructed. For 
  282.   normal PC memory, volatile objects are only used for memory that might be 
  283.   accessed by asynchronous interrupts, so accessing adjacent objects has no 
  284.   effect.
  285.  
  286. 3.5.4  The maximum number of declarators that can modify an arithmetic, 
  287. structure, or union type.
  288.  
  289.   There is no specific limit on the number of declarators. The number of
  290.   declarators allowed is fairly large, but when nested deeply within a set 
  291.   of blocks in a function, the number of declarators will be reduced. The 
  292.   number allowed at file level is at least 50.
  293.  
  294. 3.6.4.2  The maximum number of case values in a switch statement.
  295.  
  296.   There is no specific limit on the number of cases in a switch. As long
  297.   as there is enough memory to hold the case information, the compiler
  298.   will accept them.
  299.  
  300. 3.8.1  Whether the value of a single-character character constant in a
  301. constant expression that controls conditional inclusion matches the
  302. value of the same character constant in the execution character set.
  303. Whether such a character constant can have a negative value.
  304.  
  305.   All character constants, even constants in conditional directives use
  306.   the same character set (execution). Single-character character
  307.   constants will be negative if the character type is signed (default
  308.   and O|C|C|U not requested).
  309.  
  310. 3.8.2  The method for locating includable source files.
  311.  
  312.   For include file names given with angle brackets, the file is searched 
  313.   for in each of the include directories. If no include directories are 
  314.   specified, then only the current directory is searched.
  315.  
  316. 3.8.2  The support for quoted names for includable source files.
  317.  
  318.   For quoted file names, the file is first searched for in the current
  319.   directory. If not found, Turbo C++ searches for the file as 
  320.   if it were in angle brackets.
  321.  
  322. 3.8.2  The mapping of source file name character sequences.
  323.  
  324.   Backslashes in include file names are treated as distinct characters,
  325.   not as escape characters. Case differences are ignored for letters.
  326.  
  327.  
  328. 3.8.8  The definitions for __DATE__ and __TIME__ when they are unavailable.
  329.  
  330.   The date and time are always available, and will use the DOS date and time.
  331.  
  332. 4.1.1  The decimal point character.
  333.  
  334.   The decimal point character is a period (.).
  335.  
  336. 4.1.5  The type of the sizeof operator, size_t.
  337.  
  338.   The type size_t is unsigned int.
  339.  
  340. 4.1.5  The null pointer constant to which the macro NULL expands.
  341.  
  342.   An integer or a long 0, depending upon the memory model.
  343.  
  344. 4.2  The diagnostic printed by and the termination behavior of the assert
  345. function.
  346.  
  347.   The diagnostic message printed is "Assertion failed: expression, file
  348.   filename, line nn", where expression is the asserted expression which
  349.   failed, filename is the source file name, and nn is the line number
  350.   where the assertion took place.
  351.  
  352.   abort is called immediately after the assertion message is displayed.
  353.  
  354. 4.3  The implementation-defined aspects of character testing and case
  355. mapping functions.
  356.  
  357.   None, other than what is mentioned in 4.3.1.
  358.  
  359. 4.3.1  The sets of characters tested for by the isalnum, isalpha, iscntrl,
  360. islower, isprint and isupper functions.
  361.  
  362.   First 128 ASCII characters.
  363.  
  364. 4.5.1  The values returned by the mathematics functions on domain errors.
  365.  
  366.   An IEEE NAN (not a number).
  367.  
  368. 4.5.1  Whether the mathematics functions set the integer expression errno to
  369. the value of the macro ERANGE on underflow range errors.
  370.  
  371.   No, only for the other errors--domain, singularity, overflow, and total 
  372.   loss of precision.
  373.  
  374. 4.5.6.4  Whether a domain error occurs or zero is returned when the fmod
  375. function has a second argument of zero.
  376.  
  377. No. fmod(x,0) returns 0.
  378.  
  379. 4.7.1.1  The set of signals for the signal function.
  380.  
  381.   SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM.
  382.  
  383. 4.7.1.1  The semantics for each signal recognized by the signal function.
  384.  
  385.   See the description of signal in the Help system.
  386.  
  387. 4.7.1.1  The default handling and the handling at program startup for each
  388. signal recognized by the signal function.
  389.  
  390.   See the description of signal in the Help system.
  391.  
  392. 4.7.1.1  If the equivalent of signal(sig, SIG_DFL); is not executed prior to
  393. the call of a signal handler, the blocking of the signal that is performed.
  394.  
  395.   The equivalent of signal (sig, SIG_DFL) is always executed.
  396.  
  397. 4.7.1.1  Whether the default handling is reset if the SIGILL signal is received
  398. by a handler specified to the signal function.
  399.  
  400.   No, it is not.
  401.  
  402. 4.9.2  Whether the last line of a text stream requires a terminating newline
  403. character.
  404.  
  405.   No, none is required.
  406.  
  407. 4.9.2  Whether space characters that are written out to a text stream 
  408. immediately before a newline character appear when read in.
  409.  
  410.   Yes, they do.
  411.  
  412. 4.9.2  The number of null characters that may be appended to data written to
  413. a binary stream.
  414.  
  415.   None.
  416.  
  417. 4.9.3  Whether the file position indicator of an append mode stream is
  418. initially positioned at the beginning or end of the file.
  419.  
  420.   The file position indicator of an append-mode stream is initially placed 
  421.   at the beginning of the file. It is reset to the end of the file before 
  422.   each write.
  423.  
  424. 4.9.3  Whether a write on a text stream causes the associated file to be
  425. truncated beyond that point.
  426.  
  427.   A write of 0 bytes may or may not truncate the file, depending upon
  428.   how the file is buffered. It is safest to classify a zero-length write
  429.   as having indeterminate behavior.
  430.  
  431. 4.9.3  The characteristics of file buffering.
  432.  
  433.   Files can be fully buffered, line buffered, or unbuffered. If a file is 
  434.   buffered, a default buffer of 512 bytes is created upon opening the file.
  435.  
  436. 4.9.3  Whether a zero-length file actually exists.
  437.  
  438.   Yes, it does.
  439.  
  440. 4.9.3  Whether the same file can be open multiple times.
  441.  
  442.   Yes, it can.
  443.  
  444. 4.9.4.1  The effect of the remove function on an open file.
  445.  
  446.   No special checking for an already open file is performed; the 
  447.   responsibility is left up to the programmer.
  448.  
  449. 4.9.4.2  The effect if a file with the new name exists prior to a call to
  450. rename.
  451.  
  452.   rename will return a -1 and errno will be set to EEXIST.
  453.  
  454. 4.9.6.1  The output for %p conversion in fprintf.
  455.  
  456.   In near data models, four hex digits (XXXX). In far data models, four
  457.   hex digits, colon, four hex digits (XXXX:XXXX).
  458.  
  459. 4.9.6.2  The input for %p conversion in fscanf.
  460.  
  461.   See 4.9.6.1.
  462.  
  463. 4.9.6.2  The interpretation of an - (hyphen) character that is neither the
  464. first nor the last character in the scanlist for a %[ conversion in fscanf.
  465.  
  466.   See the description of scanf in the Help system.
  467.  
  468. 4.9.9.1  The value to which the macro errno is set by the fgetpos or ftell
  469. function on failure.
  470.  
  471.   EBADF   Bad file number.
  472.  
  473. 4.9.10.4  The messages generated by perror.
  474.  
  475. --------------------------------------------------------------------------
  476.   Error 0                           Invalid data
  477.   Invalid function number           No such device
  478.   No such file or directory         Attempted to remove current directory
  479.   Path not found                    Not same device
  480.   Too many open files               No more files
  481.   Permission denied                 Invalid argument
  482.   Bad file number                   Arg list too big
  483.   Memory arena trashed              Exec format error
  484.   Not enough memory                 Cross-device link
  485.  Invalid memory block address       Math argument
  486.  Invalid environment                Result too large
  487.  Invalid format                     File already exists
  488.  Invalid access code
  489. ---------------------------------------------------------------------------
  490. See perror in the Help system for details.
  491.  
  492. 4.10.3  The behavior of calloc, malloc, or realloc if the size requested is
  493. zero.
  494.  
  495.   calloc and malloc will ignore the request. realloc will free the block.
  496.  
  497. 4.10.4.1 The behavior of the abort function with regard to open and temporary
  498. files.
  499.  
  500.   The file buffers are not flushed and the files are not closed.
  501.  
  502. 4.10.4.3  The status returned by exit if the value of the argument is ]
  503. other than zero, EXIT_SUCCESS, or EXIT_FAILURE.
  504.  
  505.   Nothing special. The status is returned exactly as it is passed. The
  506.   status is a represented as a signed char.
  507.  
  508. 4.10.4.4  The set of environment names and the method for altering the
  509. environment list used by getenv.
  510.  
  511.   The environment strings are those defined in DOS with the SET command.
  512.   putenv can be used to change the strings for the duration of the current 
  513.   program, but the DOS SET command must be used to change an environment 
  514.   string permanently.
  515.  
  516. 4.10.4.5  The contents and mode of execution of the string by the system
  517. function.
  518.  
  519.   The string is interpreted as a DOS command. COMMAND.COM is executed and 
  520. the argument string is passed as a command to execute. Any DOS built-in 
  521. command, as well as batch files and executable programs, can be executed.
  522.  
  523. 4.11.6.2  The contents of the error message strings returned by strerror.
  524.  
  525.   See 4.9.10.4.
  526.  
  527. 4.12.1  The local time zone and Daylight Saving Time.
  528.  
  529.   Defined as local PC time and date.
  530.  
  531. 4.12.2.1  The era for clock.
  532.  
  533.   Represented as clock ticks, with the origin being the beginning of the
  534.   program execution.
  535.  
  536. 4.12.3.5  The formats for date and time.
  537.  
  538.   Turbo C++ implements ANSI formats.
  539.