home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK1 / ERRATA2.TX$ / errata2
Encoding:
Text File  |  1992-03-19  |  51.3 KB  |  1,383 lines

  1.  
  2.                                ERRATA2.TXT File
  3.  
  4.      Documentation Errata, Part Two, for Microsoft(R) C/C++, Version 7.0
  5.  
  6.                   (C) Copyright Microsoft Corporation, 1992
  7.  
  8.      This document contains information on known errors and omissions
  9.      in the documentation provided with version 7.0 of Microsoft C/C++.
  10.      The information in this document and in the Microsoft Advisor
  11.      Help system is more up-to-date than that in the manuals.
  12.  
  13.      Microsoft updates its languages documentation at the time of
  14.      reprinting, so some of the information in this file may already be
  15.      included in your manuals.
  16.  
  17.  
  18. ================================< Contents >================================
  19.  
  20.  
  21.      This file has nine parts:
  22.  
  23.                Part     Title
  24.                ----     -----
  25.  
  26.                6        Notes on "Run-Time Library Reference"
  27.  
  28.                7        Notes on "Class Libraries Reference"
  29.  
  30.                8        Notes on "Class Libraries User's Guide"
  31.  
  32.                9        Notes on "Comprehensive Index and Errors
  33.                         Reference"
  34.  
  35.                10       Notes on "CLANG.HLP" (Help)
  36.  
  37.                11       Notes on "CL.HLP" (Help)
  38.  
  39.                12       Notes on "LINK" (Help)
  40.  
  41.                13       Notes on Header Files
  42.  
  43.                14       Notes on "Microsoft Class Libraries" 
  44.                         Quick-Reference Card
  45.  
  46.      See also ERRATA1.TXT.
  47.  
  48.  
  49. =============< Part 6: Notes on "Run-Time Library Reference" >===============
  50.  
  51.      The CString Class and Type const char *
  52.      ---------------------------------------
  53.  
  54.      Because the Microsoft Foundation Class's (MFC) CString class has a
  55.      conversion operator for type const char *, you can pass CString
  56.      objects to any run-time library function that accepts arguments of
  57.      type const char *.
  58.  
  59.      In this version and previous versions of the run-time library
  60.      documentation, the const keyword was left out of the syntax line
  61.      that begins each run-time function's description. This omission
  62.      was made because the const keyword served mainly as an instruction
  63.      to the compiler and offered little useful information to C
  64.      programmers.
  65.  
  66.      The run-time libraries that ship with Microsoft C/C++ contain over
  67.      175 functions that accept arguments of type const char *. Look in
  68.      the associated include file if you are uncertain whether a function
  69.      accepts such arguments.
  70.  
  71.      Page    Note
  72.      ----    ----
  73.  
  74.      13      Operating-System Considerations
  75.              -------------------------------
  76.  
  77.              For ANSI compatibility, change all occurrences of "stdaux"
  78.              and "stdprn" to "_stdaux" and "_stdprn".
  79.  
  80.      32      Text and Binary Modes
  81.              ---------------------
  82.  
  83.              For ANSI compatibility, change all occurrences of "stdaux"
  84.              and "stdprn" to "_stdaux" and "_stdprn".
  85.  
  86.      36      Using Predefined Stream Pointers
  87.              --------------------------------
  88.  
  89.              For ANSI compatibility, change all occurrences of "stdaux"
  90.              and "stdprn" to "_stdaux" and "_stdprn".
  91.  
  92.      36      Controlling Stream Buffering
  93.              ----------------------------
  94.  
  95.              For ANSI compatibility, change all occurrences of "stdaux"
  96.              and "stdprn" to "_stdaux" and "_stdprn".
  97.  
  98.      37      Closing Streams
  99.              ---------------
  100.  
  101.              For ANSI compatibility, change all occurrences of "stdaux"
  102.              and "stdprn" to "_stdaux" and "_stdprn".
  103.  
  104.      40      Using Predefined Handles
  105.              ------------------------
  106.  
  107.              For ANSI compatibility, change all occurrences of "stdaux"
  108.              and "stdprn" to "_stdaux" and "_stdprn".
  109.  
  110.      63,     _doserrno, errno, _sys_errlist, _sys_nerr
  111.      64      -----------------------------------------
  112.  
  113.              For ANSI compatibility, both the _sys_nerr variable and the
  114.              _sys_errlist variable require leading underscores.
  115.  
  116.      129     The _cabs and _cabsl Functions
  117.              ------------------------------
  118.  
  119.              For these functions, replace the Return Value section
  120.              with the following:
  121.  
  122.              "These functions return the absolute value if successful, or
  123.              HUGE_VAL on overflow (_LHUGEVAL for _cabsl). The errno
  124.              variable is set to ERANGE on overflow. Error handling can
  125.              be changed with the _matherrl function."
  126.  
  127.      163     The cos Functions
  128.              -----------------
  129.  
  130.              For the cos functions, replace the Return Value section
  131.              with the following:
  132.  
  133.              "If <x> is large, a partial loss of significance in the
  134.              result may occur in a call to cos, in which case the
  135.              function generates a _PLOSS error. If <x> is so large that
  136.              significance is completely lost, cos prints a _TLOSS
  137.              message to stderr and returns 0. In both cases, errno is
  138.              set to ERANGE.
  139.  
  140.              "If the result is too large in a cosh call, the functions
  141.              return HUGE_VAL (_LHUGE_VAL for _coshl) and set errno to
  142.              ERANGE. This behavior can be changed with _matherr."
  143.  
  144.      177     The difftime Function
  145.              ---------------------
  146.  
  147.              The final printf statement in the example program DIFFTIME.C 
  148.              uses a format specifier, "%6.2f", which incorrectly implies 
  149.              accuracy to a hundredth of a second. The difftime function 
  150.              always returns a whole number. Replace the printf statement 
  151.              with the following:
  152.  
  153.              printf( "\nProgram takes %6.0f seconds.\n", elapsed_time );
  154.  
  155.              Replace the last line of the output with the following:
  156.  
  157.              Program takes   4 seconds.
  158.  
  159.      236     The _dup and _dup2 Functions
  160.              ----------------------------
  161.  
  162.              Replace the third paragraph in the Remarks section with the
  163.              following:
  164.  
  165.              "Both _dup and _dup2 accept file handles as arguments. If
  166.              you want to pass a stream (FILE *) to either of these
  167.              functions, use the _fileno function. This function
  168.              associates a stream with a file handle. The following example
  169.              shows how to associate stderr (defined as FILE * in STDIO.H)
  170.              with a handle:
  171.  
  172.              cstderr = _dup( _fileno( stderr ));
  173.  
  174.              "Note that in a QuickWin application, you cannot use either
  175.              _dup or _dup2 with _fileno on the stdin, stdout, or stderr
  176.              streams. You can, however, use the combination of the _dup 
  177.              functions and the _fileno function on other streams."
  178.  
  179.      253     The exp and _expl Functions
  180.              ---------------------------
  181.  
  182.              For these functions, replace the Return Value section with
  183.              the following:
  184.  
  185.              "These functions return the exponential value of <x> if
  186.              successful. On overflow, expl returns _HUGE_VAL and _expl
  187.              returns _LHUGE_VAL. On underflow, they return 0. The errno
  188.              variable is set to ERANGE on overflow but is not set on
  189.              underflow."
  190.  
  191.      260     The fclose and _fcloseall Functions
  192.              -----------------------------------
  193.  
  194.              For ANSI compatibility, change all occurrences of "stdaux"
  195.              and "stdprn" to "_stdaux" and "_stdprn".
  196.  
  197.      277     The fgets Function
  198.              ------------------
  199.  
  200.              In the Description section, replace the description of
  201.              the int n argument with "Maximum number of characters 
  202.              to read".
  203.  
  204.              In the Remarks section, remove the following sentence:
  205.              "If <n> is equal to 1, <string> is empty ("")."
  206.  
  207.      312     The FREOPEN.C Example
  208.              ---------------------
  209.  
  210.              For ANSI compatibility, change all occurrences of "stdaux"
  211.              and "stdprn" to "_stdaux" and "_stdprn".
  212.  
  213.      318     The fseek Function
  214.              ------------------
  215.  
  216.              Starting with Microsoft C/C++, the default action of the
  217.              fseek function is to not check whether the file pointer is
  218.              positioned before the beginning of the specified file. This
  219.              change was made for performance reasons.
  220.  
  221.              If you want to receive an error message when an attempt is
  222.              made to seek before the beginning of a file, you must
  223.              explicitly link with LSEEKCHK.OBJ. This new object enables
  224.              the code that checks for and reports the occurrence of the
  225.              error condition. Because the error check slows fseek, you
  226.              may wish to use LSEEKCHK.OBJ during the development cycle
  227.              but not in the final product.
  228.  
  229.              Replace the last sentence in the third paragraph of the
  230.              Remarks section with the following:
  231.  
  232.              "An attempt to position the pointer before the beginning of
  233.              the file causes an error only if you explicitly link with
  234.              LSEEKCHK.OBJ."
  235.  
  236.      326     The _fstat Function
  237.              -------------------
  238.  
  239.              The last paragraph in the Remarks section for the _fstat
  240.              function should read as follows:
  241.  
  242.              "In the File Allocation Table (FAT) file system supported by
  243.              MS-DOS, the creation and last access times of a file are not
  244.              kept separately. Therefore st_atime, st_ctime, and st_mtime
  245.              are always the same. These fields have different values
  246.              under UNIX.
  247.  
  248.              "Note that if <handle> refers to a device, the size and
  249.              time fields in the _stat structure are not meaningful.
  250.              Also, because STAT.H uses the _dev_t type, which is defined
  251.              in TYPES.H, you must include TYPES.H before STAT.H in your
  252.              code."
  253.  
  254.      335,    The _fwopen Function
  255.      337     --------------------
  256.  
  257.              Change all occurrences of "_WINVER" to "_QWINVER".
  258.  
  259.      348     _getch, _getche
  260.              ---------------
  261.  
  262.              These functions cannot be used in QuickWin programs.
  263.  
  264.      366     The _getgtextvector Function
  265.              ----------------------------
  266.  
  267.              Change the first word in the Description sentence from
  268.              "Changes" to "Gets".
  269.  
  270.      367     The _getimage Functions
  271.              -----------------------
  272.  
  273.              Remove the following sentence fragment from the final
  274.              paragraph of the Remarks section:
  275.  
  276.              "or by using the formula described on the _imagesize
  277.              reference page."
  278.  
  279.  
  280.      424     The _hypot and _hypotl Functions
  281.              --------------------------------
  282.  
  283.              For these functions, replace the Return Value section with
  284.              the following:
  285.  
  286.              "These functions return the length of the hypotenuse if
  287.              successful or _HUGE_VAL (_LHUGE_VAL for _hypotl) on
  288.              overflow. The errno variable is set to ERANGE on overflow."
  289.  
  290.      447     The _ldexp, and _ldexpl Functions
  291.              ---------------------------------
  292.  
  293.              For these functions, replace the first paragraph of the
  294.              Return section with the following:
  295.  
  296.              "These functions return an exponential value if successful.
  297.              On overflow (depending on the sign of <x>), _ldexp returns
  298.              +/-_HUGE_VAL, and _ldexpl returns +/-_LHUGE_VAL; the errno
  299.              variable is set to ERANGE."
  300.  
  301.      462     The _locking Function
  302.              ---------------------
  303.  
  304.              The LOCKING.C example should include a call to the lseek
  305.              function (between the call to printf and the call to
  306.              _locking in the if block). Add the following line to
  307.              correctly reset the file pointer before unlocking the file:
  308.  
  309.              lseek( fh, 0L, SEEK_SET );
  310.  
  311.      463     The log Functions
  312.              -----------------
  313.  
  314.              For the _logl and _logl10 functions, replace the first
  315.              paragraph of the Return Value section with the following:
  316.  
  317.              "The log functions return the logarithm of <x> if
  318.              successful. If <x> is negative, the functions print a
  319.              _DOMAIN error message to stderr, return the value -HUGE_VAL
  320.              (-_LHUGE_VAL for the long double functions), and set errno
  321.              to EDOM. If <x> is 0, they print a _SING error message to
  322.              stderr, and set errno to ERANGE."
  323.  
  324.      471     The _lseek Function
  325.              -------------------
  326.  
  327.              Starting with Microsoft C/C++, the default action of the
  328.              _lseek function is to not check whether the file pointer is
  329.              positioned before the beginning of the specified file. This
  330.              change was made for performance reasons.
  331.  
  332.              If you want to receive an error message when an attempt is
  333.              made to seek before the beginning of a file, you must
  334.              explicitly link with LSEEKCHK.OBJ. This new object enables
  335.              the code that checks for and reports the occurrence of the
  336.              error condition. Because the error check slows _lseek, you
  337.              may wish to use LSEEKCHK.OBJ during the development cycle
  338.              but not in the final product.
  339.  
  340.              Replace the last sentence in the Remarks section with:
  341.  
  342.              "An attempt to position the pointer before the beginning of
  343.              the file causes an error only if you explicitly link with
  344.              LSEEKCHK.OBJ."
  345.  
  346.      480     malloc Functions
  347.              ----------------
  348.  
  349.              The list of functions that can call malloc should include
  350.              the realloc and ::operator new functions.
  351.  
  352.  
  353.      484     The _matherr and _matherrl Functions
  354.              ------------------------------------
  355.  
  356.              The description of the _UNDERFLOW value for the type field
  357.              of the _exception structure should read as follows:
  358.  
  359.              _UNDERFLOW  The result is too small to be represented.
  360.                          (This condition is not currently supported.)
  361.  
  362.      521     The mktime Function
  363.              -------------------
  364.  
  365.              The fourth paragraph in the Remarks section should read as
  366.              follows:
  367.  
  368.              "The mktime function handles dates in any time zone from
  369.              midnight, December 31, 1899 to midnight, February 5, 2036.
  370.              If timeptr references a date before midnight, December 31,
  371.              1899, mktime returns -1 cast to type time_t."
  372.  
  373.      547     perror
  374.              ------
  375.  
  376.              For ANSI compatibility, both the _sys_nerr variable and the
  377.              _sys_errlist variable require leading underscores.
  378.  
  379.      654     The setbuf Function
  380.              -------------------
  381.  
  382.              For ANSI compatibility, change all occurrences of "stdaux"
  383.              and "stdprn" to "_stdaux" and "_stdprn".
  384.  
  385.      570     The _pg_initchart Function
  386.              --------------------------
  387.  
  388.              The first paragraph under the Remarks section should end
  389.              with the following sentence:
  390.  
  391.              "Also, _pg_initchart must be called after each change of the
  392.              video mode."
  393.  
  394.      613     The realloc Functions
  395.              ---------------------
  396.  
  397.              Add the following sentence to the last sentence of the second
  398.              paragraph in the Remarks section:
  399.  
  400.              "Because the new block can be in a new memory location, the
  401.              pointer returned by the realloc functions is not guaranteed
  402.              to be the pointer passed through the <memblock> argument."
  403.  
  404.      670     The setmod Function
  405.              -------------------
  406.  
  407.              For ANSI compatibility, change all occurrences of "stdaux"
  408.              and "stdprn" to "_stdaux" and "_stdprn".
  409.  
  410.      638     scanf
  411.              -----
  412.  
  413.              The format specifier %U listed in table R.5 is obsolete and
  414.              is no longer supported.
  415.  
  416.      712     The sinh Functions
  417.              ------------------
  418.  
  419.              For the sin functions, replace the second paragraph of the
  420.              Return Value section with the following:
  421.  
  422.              "The sinh function returns the hyperbolic sine of <x>. If
  423.              the result is too large, sinh sets errno to ERANGE and
  424.              returns +/-HUGE_VAL (+/-_LHUGE_VAL for the long double
  425.              functions). Error handling can be changed with the _matherr
  426.              function."
  427.  
  428.      734     _stat
  429.              -----
  430.  
  431.              For ANSI compatibility, type _dev_t requires a leading
  432.              underscore.
  433.  
  434.      755     strerror, _strerror
  435.              -------------------
  436.  
  437.              For ANSI compatibility, both the _sys_nerr variable and the
  438.              _sys_errlist variable require a leading underscore.
  439.  
  440.      799     strxfrm
  441.              -------
  442.  
  443.              At the end of the Remarks section, this line:
  444.  
  445.                  return( strlen( _string2 ) );
  446.  
  447.              should be:
  448.  
  449.                  return strlen( _string1 );
  450.  
  451.      866     The _wclose Function
  452.              --------------------
  453.  
  454.              Change all occurrences of "_WINVER" to "_QWINVER".
  455.  
  456.      872     The _wgetexit Function
  457.              ----------------------
  458.  
  459.              Change all occurrences of "_WINVER" to "_QWINVER".
  460.  
  461.      879     The _wgetsize Function
  462.              ----------------------
  463.  
  464.              Change all occurrences of "_WINVER" to "_QWINVER".
  465.  
  466.      882,    The _wopen Function
  467.      884     -------------------
  468.  
  469.              Change all occurrences of "_WINVER" to "_QWINVER".
  470.  
  471.      890     The _wsetexit Function
  472.              ----------------------
  473.  
  474.              Change all occurrences of "_WINVER" to "_QWINVER".
  475.  
  476.      897     The _wsetsize Function
  477.              ----------------------
  478.  
  479.              Change all occurrences of "_WINVER" to "_QWINVER".
  480.  
  481.      906     Index
  482.              -----
  483.  
  484.              The _daylight variable is missing its leading underscore in
  485.              the index to the "Run-Time Library Reference."
  486.  
  487.      915     Index
  488.              -----
  489.  
  490.              Under O, insert:
  491.                 OLDNAMES.LIB, x (Introduction)
  492.  
  493.      922     Index
  494.              -----
  495.  
  496.              The _timezone and _tzname variables are missing their
  497.              leading underscores in the index to the "Run-Time Library
  498.              Reference."
  499.  
  500. =============< Part 7: Notes on "Class Libraries Reference" >===============
  501.  
  502.      The LPSTR parameter type in the following functions was changed to 
  503.      LPCSTR:
  504.  
  505.      CWinApp::LoadCursor
  506.      CWinApp::LoadStandardCursor
  507.      CWinApp::LoadIcon
  508.      CWinApp::LoadStandardIcon
  509.      CDC::Escape(..., LPSTR lpInData, ...);
  510.  
  511.      The LPSTR parameter type in the following functions was changed to 
  512.      const void FAR*:
  513.  
  514.      CBitmap::CreateBitmap
  515.      CBitmap::SetBitmapBits
  516.      CDC::CreateDC
  517.      CDC::CreateIC
  518.      CMenu::LoadMenuIndirect
  519.      CDialog::CreateIndirect
  520.  
  521.      The const char FAR* parameter type in the following functions was 
  522.      changed to LPSTR:
  523.  
  524.      CWnd::DlgDirList
  525.      CWnd::DlgDirListComboBox
  526.      CDC::GetTextFace
  527.  
  528.      The function CWnd::SetWindowPos returns a Boolean value, which is 
  529.      nonzero if successful. 
  530.  
  531.      The function CGdiObject::DeleteObject now returns a Boolean value.
  532.  
  533.      The return type has changed for the following global functions and 
  534.      member function:
  535.  
  536.      HINSTANCE AfxGetInstanceHandle();
  537.      HINSTANCE AfxGetResourceHandle();
  538.      WNDPROC* CWnd::GetSuperWndProcAddr();
  539.  
  540.      The LPSTR parameter type has been replaced in the syntax of the 
  541.      following member functions, as follows:
  542.  
  543.      DWORD CBitmap::GetBitmapBits( DWORD dwCount, void FAR* lpBits) const;
  544.      int CDC::Escape( int nEscape, int nCount, LPCSTR lpInData, void FAR* 
  545.              lpOutData);
  546.      int CGdiObject::GetObject( int nCount, void FAR* lpObject) const;
  547.  
  548.      The CWnd* parameter type in the syntax of the following member 
  549.      functions has changed to the CListBox* or CScrollBar* type:
  550.  
  551.      afx_msg int CWnd::OnCharToItem(UINT nChar, CListBox* pListBox, UINT 
  552.              nIndex);
  553.      afx_msg void CWnd::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* 
  554.              pScrollBar);
  555.      afx_msg int CWnd::OnVKeyToItem(UINT nKey, CListBox* pListBox, UINT 
  556.              nIndex);
  557.      afx_msg void CWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* 
  558.              pScrollBar);
  559.  
  560.      Both the parameter and parameter type have changed for the following 
  561.      member function: 
  562.  
  563.      afx_msg void CWnd::OnNcCalcSize( NCCALCSIZE_PARAMS FAR* lpncsp);
  564.  
  565.      Changes should be made to the "Class Libraries Reference" manual 
  566.      on the following pages:
  567.  
  568.      Page    Note
  569.      ----    ----
  570.  
  571.      74      WM_PAINTICON Message is No Longer Supported
  572.              -------------------------------------------
  573.  
  574.              The WM_PAINTICON message is no longer supported by Windows 
  575.              3.1. Therefore, the OnPaintIcon member function (described on 
  576.              page 773) is no longer part of the CWnd class. This also means 
  577.              that the message-map entry ON_WM_PAINTICON() on page 74 and 
  578.              the corresponding function prototype are not supported. Windows 
  579.              now generates the WM_PAINT message for events that would have 
  580.              triggered WM_PAINTICON messages, so CWnd::OnPaint can be used 
  581.              instead of OnPaintIcon.
  582.  
  583.      90      Class Hierarchy Chart
  584.              ---------------------
  585.  
  586.              The chart should show that class CMDIFrameWnd is derived
  587.              from CFrameWnd instead of CWnd. This change should also
  588.              be made to the Microsoft Class Libraries quick-reference
  589.              card.
  590.  
  591.      271     CDialog::OnInitDialog
  592.              --------------------
  593.  
  594.              Replace the paragraph under Return Value with the
  595.              following:
  596.  
  597.              "Specifies whether the application has set the input focus
  598.              to one of the controls in the dialog box. If OnInitDialog
  599.              returns TRUE, Windows sets the input focus to the first
  600.              control in the dialog box. The application can return
  601.              FALSE only if it has explicitly set the input focus to one
  602.              of the controls in the dialog box."
  603.  
  604.      437     The description of the lpRectReserved parameter of 
  605.              CMenu::TrackPopupMenu should say that lpRectReserved points 
  606.              to a RECT structure or CRect object instead of a RECT structure 
  607.              or CPoint object. 
  608.  
  609.      514     class CPoint
  610.              ------------
  611.  
  612.              The description of the return value for member function
  613.              Offset of class CPoint should read as follows:
  614.  
  615.              "A CPoint offset by a POINT, CPoint, SIZE, or CSize."
  616.  
  617.      606     class CTime
  618.              -----------
  619.  
  620.              Add the following sentence to the third paragraph:
  621.  
  622.              "Note that CTime uses the strftime function, which is
  623.              not supported for Windows DLLs. Therefore, CTime cannot be
  624.              used in Windows DLLs."
  625.  
  626.      773     WM_PAINTICON Message is No Longer Supported
  627.              -------------------------------------------
  628.  
  629.              The WM_PAINTICON message is no longer supported by Windows 
  630.              3.1. Therefore, the OnPaintIcon member function is no longer 
  631.              part of the CWnd class. 
  632.  
  633. ============< Part 8: Notes on "Class Libraries User's Guide" >=============
  634.  
  635.      Page    Note
  636.      ----    ----
  637.  
  638.      9       Makefile Defaults
  639.              -----------------
  640.  
  641.              The third paragraph in the "Makefile Defaults" section
  642.              should read as follows:
  643.  
  644.              "Both release mode and debug mode sample programs build
  645.              into the same directory. DMTEST and CMDBOOK build into
  646.              the MFC\SAMPLES\TUTORIAL\CHAR directory. PHBOOK builds
  647.              into the MFC\SAMPLES\TUTORIAL\WIN directory. HELLO
  648.              builds into the MFC\SAMPLES\HELLO directory."
  649.  
  650.              The fourth paragraph in the same section should be
  651.              completely deleted. This paragraph begins as follows:
  652.  
  653.              "For debug mode builds, DMTEST and CMDBOOK build into
  654.              the MFC\SAMPLES\TUTORIAL\CHARD directory...."
  655.  
  656.      11      How to Build with PWB
  657.              ---------------------
  658.  
  659.              At the top of the page, item 7 in the list should be
  660.              replaced by the following:
  661.  
  662.              "If you get errors, examine the error messages in the
  663.              Build Results window. You can get information on the
  664.              error messages in Help or in the 'Comprehensive
  665.              Index and Error Reference' manual. After correcting these
  666.              errors, rebuild your program."
  667.  
  668.      12      Debug Mode for PWB
  669.              ------------------
  670.  
  671.              Item 3 under "To switch from release builds to debug-
  672.              ging builds with PWB" should read simply as follows:
  673.  
  674.              3. Select "Use Debug Options"
  675.  
  676.              Delete the explanatory paragraph below item 3.
  677.  
  678.      12      Debug Mode for NMAKE
  679.              --------------------
  680.  
  681.              Add the following lines just after "To switch from
  682.              release builds to debugging builds with NMAKE":
  683.  
  684.              - Remove all existing release-mode object, compiled
  685.                resource, and executable files by invoking NMAKE
  686.                on the sample makefile while specifying the 'clean'
  687.                target. For example:
  688.  
  689.                NMAKE /F PHBOOK clean      (case is significant)
  690.  
  691.                You must always move or delete old compiled files before
  692.                switching build modes (from release to debug or from
  693.                debug to release).
  694.  
  695.      59      Incorrect Output Listing
  696.              ------------------------
  697.  
  698.              The line following the second instance of "List contains:"
  699.              in the program output should read:
  700.  
  701.              Meyers, Brian 236-1234
  702.  
  703.              The corresponding output from the sample program
  704.              (DMTEST.EXE) is correct.
  705.  
  706.      116     RESOURCE.H Source Code Listing
  707.              ------------------------------
  708.  
  709.              The file listing for file RESOURCE.H is missing an end-
  710.              comment delimiter. The first line of the file should end
  711.              with a "*/" comment delimiter. The code is correct on
  712.              disk.
  713.  
  714.      165     How Dialog Objects Work
  715.              -----------------------
  716.  
  717.              The last sentence in the first paragraph of this section
  718.              should read "For a distinction between modal and modeless
  719.              dialog boxes, see 'Modal vs. Modeless Dialog Boxes' on
  720.              page 162."
  721.  
  722.      171     VIEW.CPP Source Code Listing
  723.              ----------------------------
  724.  
  725.              Change the one occurrence of the following:
  726.  
  727.                  extern "C"
  728.                  {
  729.                      #include <commdlg.h>
  730.                  }
  731.  
  732.              to the following:
  733.  
  734.                  #include <commdlg.h>
  735.  
  736.      176     VIEW.CPP Source Code Listing
  737.              ----------------------------
  738.  
  739.              Change both occurrences of the following:
  740.  
  741.                  char ErrorMsg[25];
  742.  
  743.              to the following:
  744.  
  745.                  char ErrorMsg[SIZESTRING];
  746.  
  747.      178     VIEW.CPP Source Code Listing
  748.              ----------------------------
  749.  
  750.              Change the one occurrence of the following:
  751.  
  752.                  char szError[50];
  753.  
  754.              to the following:
  755.  
  756.                  char szError[SIZESTRING];
  757.  
  758.              Also on page 178, change the following:
  759.  
  760.                  UINT nExtPage = ( dc->GetDeviceCaps(VERTRES) -
  761.                                    nCharHeight ) / nCharHeight;
  762.  
  763.              to the following:
  764.  
  765.                  int nExtPage = ( dc->GetDeviceCaps(VERTRES) -
  766.                                   nCharHeight ) / nCharHeight;
  767.  
  768.      180     VIEW.CPP Source Code Listing
  769.              ----------------------------
  770.  
  771.              After the line that reads:
  772.  
  773.                  pMenu -> EnableMenuItem( IDM_FINDALL, MF_ENABLED );
  774.  
  775.              add the line:
  776.  
  777.                  pMenu -> EnableMenuItem( IDM_FIND, MF_GRAYED );
  778.  
  779.  
  780.      181     VIEW.CPP Source Code Listing
  781.              ----------------------------
  782.  
  783.              After the line that reads:
  784.  
  785.                  pMenu -> EnableMenuItem( IDM_FINDALL, MF_GRAYED );
  786.  
  787.              add the line:
  788.  
  789.                  pMenu -> EnableMenuItem( IDM_FIND, MF_ENABLED );
  790.  
  791.  
  792.      184     VIEW.CPP Source Code Listing
  793.              ----------------------------
  794.  
  795.              Change the occurrence of the following:
  796.  
  797.                  void CMainWindow::OnVScroll( UINT wParam, UINT pos, CWnd* )
  798.  
  799.              to the following:
  800.  
  801.                  void CMainWindow::OnVScroll( UINT wParam, UINT pos,
  802.                                               CScrollBar* )
  803.  
  804.      185     VIEW.CPP Source Code Listing
  805.              ----------------------------
  806.  
  807.              Change the occurrence of the following:
  808.  
  809.                  void CMainWindow::OnHScroll( UINT wParam, UINT pos, CWnd* )
  810.  
  811.              to the following:
  812.  
  813.                  void CMainWindow::OnHScroll( UINT wParam, UINT pos,
  814.                                               CScrollBar* )
  815.  
  816.  
  817.      192     VIEW.CPP Source Code Listing
  818.              ----------------------------
  819.  
  820.              Change the occurrences of the following:
  821.  
  822.                  of.lpstrFilter = (LPSTR)szFilter;
  823.                  of.lpstrCustomFilter = (LPSTR)NULL;
  824.                  of.lpstrTitle = (LPSTR)NULL;
  825.                  of.lpstrDefExt = (LPSTR)"pb";
  826.  
  827.              to the following:
  828.  
  829.                  of.lpstrFilter = szFilter;
  830.                  of.lpstrCustomFilter = NULL;
  831.                  of.lpstrTitle = NULL;
  832.                  of.lpstrDefExt = "pb";
  833.  
  834.      193     VIEW.CPP Source Code Listing
  835.              ----------------------------
  836.  
  837.              Change both occurrences of the following:
  838.  
  839.                  char ErrorMsg[25];
  840.  
  841.              to the following:
  842.  
  843.                  char ErrorMsg[SIZESTRING];
  844.  
  845.      203     To add a constructor definition:
  846.              --------------------------------
  847.  
  848.              The last sentence in the first paragraph on this page
  849.              should read "For more information about the VERIFY macro
  850.              and its companion, the ASSERT macro, see Chapter 11 in this
  851.              manual."
  852.  
  853.      364     Microsoft C/C++ Input/Output Alternatives
  854.              -----------------------------------------
  855.  
  856.              Add the following sentence to the last paragraph on the
  857.              page:
  858.  
  859.              "You cannot use iostreams in tiny-model programs. The reason
  860.              is that tiny-model programs cannot contain static objects
  861.              like the cin and cout stream objects."
  862.  
  863. ======< Part 9: Notes on "Comprehensive Index and Errors Reference" >=======
  864.  
  865.      NOTE: The Comprehensive Index does not include entries for books 
  866.      ordered as fulfillment items for MS C/C++.
  867.  
  868.      Page    Note
  869.      ----    ----
  870.  
  871.      77,     Index
  872.      252     -----
  873.  
  874.              The _daylight and _tzname variables are missing their
  875.              ANSI-mandated underscores.
  876.  
  877.      255     Index
  878.              -----
  879.  
  880.              The _timezone variable is not listed. The _timezone
  881.              variable is described on page 62 of the "Run-Time Library
  882.              Reference."
  883.  
  884.      Changes to "Error Messages"
  885.      ---------------------------
  886.  
  887.      If there is a difference between the printed description of an
  888.      error or warning and its description in Help, then the information
  889.      in Help supersedes information in the printed documentation.
  890.  
  891.      The printed descriptions for the following errors are superseded
  892.      by the descriptions given in Help:
  893.  
  894.      DOS Extender Run-Time Errors
  895.  
  896.           R6901, R6903, R6907, R6914, R6918, R6921, R6950
  897.  
  898.      CVPACK Error
  899.  
  900.           CK1003
  901.  
  902.      The CVPACK error message CK1002 is incorrect:
  903.  
  904.      CK1002  out of virtual memory
  905.  
  906.              The printed documentation and Help for this error
  907.              incorrectly mention a DPMI server named MSDPMI.EXE.
  908.              To make extended memory available to CVPACK, run it in
  909.              a DOS session under Windows 3.x enhanced mode, or under
  910.              another DPMI server such as the version of Qualitas 
  911.              386-Max that ships with Microsoft C/C++. 
  912.  
  913.      Neither the printed nor the online documents describe the following
  914.      new CVPACK error message:
  915.  
  916.      CK1022  Symbol table for <filename> is too large.
  917.  
  918.              The corrective action is to compile <filename> without
  919.              CodeView information, reduce the number of symbols in
  920.              the file, or split the file into two or more pieces.
  921.  
  922.      The following CodeView error messages are new:
  923.  
  924.      CV1060  command not supported for current configuration
  925.  
  926.              If you have specified the two-monitors option (/2), you
  927.              cannot specify the flip/swap option (/of- or /of+) from the
  928.              CodeView Command Window.
  929.  
  930.      CV3627  no nonnative execution model
  931.  
  932.              You must specify a nonnative execution model in order to
  933.              debug a p-code program. If you do not, CodeView displays a
  934.              message box that reminds you that you must.
  935.  
  936.              Add the following line to your TOOLS.INI file:
  937.  
  938.                   model:nmd1pcd.dll
  939.  
  940.     Compiler error C1060 should include the following information:
  941.  
  942.     C1060    compiler is out of far heap space
  943.  
  944.              In addition to the solutions described in the printed
  945.              documentation and Help, increasing the amount of virtual
  946.              memory that Windows provides can solve this problem.
  947.              To do this, run the Control Panel program in the Windows
  948.              Main group, and then open the 386 Enhanced dialog box.
  949.              Next, click the "Virtual Memory" button and then click
  950.              the "Change" button. Enter a larger value in the "New
  951.              Size" field. You may need to free some disk space before
  952.              you can use more virtual memory.
  953.  
  954.      The printed description of the following errors and warnings
  955.      should be replaced:
  956.  
  957.      C1004   unexpected end of file found
  958.  
  959.              The default disk drive did not contain sufficient space
  960.              for compiler-generated temporary files. The space required
  961.              is approximately two times the size of the source file.
  962.  
  963.              This message appears: 
  964.  
  965.              - When #if directives evaluate to false without corresponding 
  966.                closing #endif directives.
  967.  
  968.              - If the precompiled headers option (/Yu) is enabled, but the 
  969.                file doesn't contain a hdrstop pragma.
  970.  
  971.              - When the /Yu<filename> option is used and the source file 
  972.                being compiled does not contain an #include "<filename>" 
  973.                directive that uses the same filename used with /Yu.
  974.  
  975.      C4010   single-line comment contains line-continuation character
  976.  
  977.              A single-line comment (introduced by //) contains a
  978.              line-continuation character (\). The next line after the
  979.              line-continuation character is ignored; it is considered to
  980.              be the continuation of the previous line and is treated as
  981.              a comment.
  982.  
  983.      The following compiler error is not described in the printed
  984.      documentation or in Help:
  985.  
  986.      C2599   'function' : local functions are not supported
  987.  
  988.      The specified function was defined inside the body of another
  989.      function.
  990.  
  991.      This error can be caused by omitting the closing curly brace (})
  992.      in a function definition.
  993.  
  994.      The following is an example of this error:
  995.  
  996.           void func1()
  997.           {
  998.                                  // Missing a closing curly brace here
  999.                void func2() {}   // Error detected on this line
  1000.  
  1001.           void func3()
  1002.           {
  1003.                void func4() {}   // Error detected on this line
  1004.           }                      // Local functions not allowed
  1005.  
  1006.      The following errors have been renumbered:
  1007.  
  1008.      C2852 is now C1852
  1009.      C2853 is now C1853
  1010.  
  1011. The following compiler errors are not documented in Help or in the
  1012. printed documentation.
  1013.  
  1014.  
  1015.      C2675   unary 'operator' : 'class' does not define this operator or
  1016.              a conversion to a type acceptable to the builtin operator
  1017.  
  1018.              The specified operator was used on a user-defined type
  1019.              that did not define the operator or allow the type to be
  1020.              converted to a fundamental type.
  1021.  
  1022.              This error can be caused by specifying a parameter type
  1023.              in a unary operator definition. A unary operator is
  1024.              always passed an implicit this pointer to the object
  1025.              the operator is applied to, so the correct definition
  1026.              syntax for a unary operator uses empty parentheses.
  1027.  
  1028.              The following is an example of this error:
  1029.  
  1030.                   class C
  1031.                   {
  1032.                      public:
  1033.                      operator +(int);  // binary +, not unary
  1034.                   } c;
  1035.  
  1036.                   class D
  1037.                   {
  1038.                      public:
  1039.                      operator int();   // conversion to int
  1040.                   } d;
  1041.  
  1042.                   class E
  1043.                   {
  1044.                      public:
  1045.                      operator +();     // correct unary syntax
  1046.                   } e;
  1047.  
  1048.                   int i;
  1049.                   void main()
  1050.                   {
  1051.                      i = +c;   // error
  1052.                      i = +d;   // OK, d is converted to int first
  1053.                      i = +e;   // OK, unary + is defined
  1054.                   }
  1055.  
  1056.      C2676   binary 'operator' : 'class' does not define this operator
  1057.              or a conversion to a type acceptable to the builtin
  1058.              operator
  1059.  
  1060.              The specified operator was used on a user-defined type
  1061.              that did not define the operator or allow the type to be
  1062.              converted to a fundamental type.
  1063.  
  1064.              This error can be caused by defining the unary form of
  1065.              an operator but not the binary form. The correct syntax
  1066.              for a binary operator uses one parameter.
  1067.  
  1068.              The following is an example of this error:
  1069.  
  1070.                   class C
  1071.                   {
  1072.                      public:
  1073.                      operator +();     // unary +, but not binary
  1074.                   } c;
  1075.  
  1076.                   class D
  1077.                   {
  1078.                      public:
  1079.                      operator int();   // conversion to int
  1080.                   } d;
  1081.  
  1082.                   class E
  1083.                   {
  1084.                      public:
  1085.                      operator +(int);  // correct binary syntax
  1086.                   } e;
  1087.  
  1088.                   int i;
  1089.                   void main()
  1090.                   {
  1091.                      i = c + 1;   // error
  1092.                      i = d + 1;   // OK, d is converted to int first
  1093.                      i = e + 1;   // OK, binary + is defined
  1094.  
  1095.      C2677   binary 'operator' : no global operator defined which
  1096.              takes type 'class' (or there is no acceptable conversion)
  1097.  
  1098.              The specified operator was used on a user-defined type
  1099.              that did not define the operator or allow the type to be
  1100.              converted to a fundamental type.
  1101.  
  1102.              This error can be caused by an incorrect definition of the
  1103.              operator, or by using the parameters in the wrong order.
  1104.  
  1105.              The following is an example of this error:
  1106.  
  1107.                   class C
  1108.                   {
  1109.                      public:
  1110.                      operator +(int);  // OK for C + int
  1111.                   } c;
  1112.  
  1113.                   void main()
  1114.                   {
  1115.                      c = 1 + c;        // error for int + C
  1116.                   }
  1117.  
  1118.              The following example shows correct declaration of a global
  1119.              operator for a user-defined type:
  1120.  
  1121.                   class C
  1122.                   {
  1123.                      public:
  1124.                      friend C operator+( int, C& );
  1125.                   } c;
  1126.  
  1127.                   void main()
  1128.                   {
  1129.                      c = 1 + c;   // OK
  1130.                   }
  1131.  
  1132.      Compiler Warning C4793 is not documented in Help or in the printed
  1133.      documentation:
  1134.  
  1135.      C4793   native code generated for p-code function 'function' with
  1136.              inline assembly
  1137.  
  1138.              Because the specified function contained inline assembly,
  1139.              it was not compiled as a p-code function. It is not possible
  1140.              to mix p-code and assembly in a function.
  1141.                
  1142.      Additions to "Error Messages"
  1143.      -----------------------------
  1144.  
  1145.      The following errors and warnings are described in Help but are not
  1146.      described in the printed documentation.
  1147.  
  1148.      Fatal Errors:
  1149.  
  1150.      C1014  too many include files : depth = 'level'
  1151.      C1038  compiler limit : 'function' : control flow state too
  1152.             complex; simplify function
  1153.      C1506  unrecoverable block scoping error
  1154.  
  1155.      Compiler Errors:
  1156.  
  1157.      C2080  illegal __far __fastcall function or __saveregs function
  1158.      C2081  'identifier' : name in formal parameter list illegal
  1159.      C2117  'identifier' : array bounds overflow
  1160.      C2128  'function' : alloc_text/same_seg applicable only to
  1161.             functions with C linkage
  1162.      C2138  cannot define an enumeration with no members
  1163.      C2147  'identifier' : const array must be fully initialized
  1164.      C2201  'identifier' : cannot export static declarations
  1165.      C2225  'function' : function allocation must be in a named segment
  1166.      C2230  'operator' : indirection to different types
  1167.      C2240  unexpected 'token' following formal list. (only modifiers
  1168.             are allowed.)
  1169.      C2265  'identifier' : reference to a zero sized array is illegal
  1170.      C2266  'identifier' : reference to a nonconstant bounded array is
  1171.             illegal
  1172.      C2267  'function' : block scoped static functions are illegal
  1173.      C2275  'identifier' : illegal use of this type as an expression
  1174.      C2276  illegal address of bound member function expression
  1175.      C2277  'identifier' : cannot take the address of a constructor
  1176.      C2278  'function' : no function with C linkage found
  1177.      C2279  cannot use braces to initialize default arguments
  1178.      C2280  missing '{' before identifier 'identifier'?
  1179.      C2281  'identifier1' : is not a function, but contains <function
  1180.             returning>. 'identifier2' is expected.
  1181.      C2282  'identifier1' is followed by 'identifier2'. (missing ','?)
  1182.      C2283  'identifier' : pure specifier not allowed on unnamed
  1183.             class-key
  1184.      C2290  C++ 'keyword' syntax is reserved for future use
  1185.      C2379  formal parameter 'number' has different type when promoted
  1186.      C2379  formal parameter 'number' has different type when promoted
  1187.      C2387  ambiguous conversion from 'type1&' to 'type2&'
  1188.      C2423  'number' : illegal scale
  1189.      C2466  cannot allocate an array of constant size 0
  1190.      C2513  'type' : decl-specifier is missing a declarator before '='
  1191.      C2602  'class::identifier' is not a member of a base of 'class'
  1192.      C2603  illegal access declaration: 'class1' is not a direct base
  1193.             of 'class2'
  1194.      C2604  cannot declare 'modifier' access to 'modifier' member
  1195.      C2605  overloaded functions 'class::function' do not have same
  1196.             access
  1197.      C2606  'class::identifier': illegal private access declaration
  1198.      C2610  identifier 'identifier' can never be instantiated; user
  1199.             defined constructor is required
  1200.      C2634  '&class::member' : pointer to reference member is illegal
  1201.      C2723  'function' : 'specifier' storage class specifier illegal
  1202.             on function definition
  1203.      C2758  'const' : must be initialized in constructor base/member
  1204.      C2855  command-line option 'option' inconsistant with precompiled
  1205.             header
  1206.      C2856  #pragma hdrstop cannot be inside an #if block
  1207.      C2857  '#include filename' statement specified with the
  1208.             /Yc'filename'command-line option was not found in the
  1209.             source file
  1210.  
  1211.      Compiler Warnings:
  1212.  
  1213.      C4011  'identifier' : identifier was truncated to 'number'
  1214.             characters
  1215.      C4032  formal parameter 'number' has different type when promoted
  1216.      C4056  overflow in floating point constant arithmetic
  1217.      C4057  'operator' : indirection to slightly different base types
  1218.      C4058  unions are now aligned on alignment requirement, not size
  1219.      C4097  nonstandard extension : typedef-name 'identifier1' used as
  1220.             synonym for class-name 'identifier2'
  1221.      C4126  'option' : unknown memory-model command-line option
  1222.      C4127  conditional expression is constant
  1223.      C4146  unary minus operator applied to unsigned type, result still
  1224.             unsigned
  1225.      C4147  'identifier' : 'modifier' ignored on pointer and reference
  1226.             declarations
  1227.      C4152  nonstandard extension, function/data ptr conversion in
  1228.             expression
  1229.      C4153  function/data pointer conversion in expression
  1230.      C4154  deletion of an array expression; conversion to pointer
  1231.             supplied
  1232.      C4155  deletion of an array expression without using the array
  1233.             form of 'delete'
  1234.      C4156  deletion of an array expression without using the array
  1235.             form of 'delete'; array form substituted
  1236.      C4251  'identifier' : base type 'type' should be exported to
  1237.             export 'class-key' 'identifier'
  1238.      C4260  no override, 'class1::function1' has 'model' 'this' memory
  1239.             model whereas 'class2::function2' has 'model 'this' memory
  1240.             model
  1241.      C4261  no override, 'class1::function1' has 'model' calling
  1242.             convention whereas 'class2::function2' has 'model' calling
  1243.             convention
  1244.      C4307  'operator' : integral constant overflow; result truncated
  1245.      C4308  negative integral constant converted to unsigned type
  1246.      C4309  'identifier' : truncation of constant value
  1247.      C4355  'this' : used in base member initializer list
  1248.      C4385  'text' the 'identifier1' in base 'identifier2'
  1249.      C4386  'text' to the 'identifier1' in base 'identifier2'
  1250.      C4622  overwriting debug information formed during creation of the
  1251.             precompiled header in object file: 'file'
  1252.      C4741  /Oq option ignored for __fastcall function 'function'
  1253.  
  1254.      Command-Line Warnings:
  1255.  
  1256.      D4023  option 'option' forces use of optimizing compiler
  1257.  
  1258.      LINK Warnings:
  1259.  
  1260.      L4086  /r not first on command line; ignored
  1261.  
  1262.      DOS Extender Run-Time Errors:
  1263.  
  1264.      R6950  VMCPD.386 has been superseded by a later version of Windows.
  1265.             Change the [386Enh] section in SYSTEM.INI by replacing this
  1266.             line:
  1267.  
  1268.                 device=[path\]vmcpd.386
  1269.  
  1270.             with this line:
  1271.  
  1272.                 device=*vmcpd
  1273.  
  1274. ================< Part 10: Notes on "CLANG.HLP" (Help) >==================
  1275.  
  1276.      Example Program for vsprintf, vprintf, and vfprintf
  1277.      ---------------------------------------------------
  1278.  
  1279.      In the WPRINTF.C example program for the vsprintf, vprintf, and
  1280.      vfprintf functions, the following line is incorrect:
  1281.  
  1282.           size = (size > 512) ? 512 : size * 5;
  1283.  
  1284.      The greater-than operator should be a less-than operator:
  1285.  
  1286.           size = (size < 512) ? 512 : size * 5;
  1287.  
  1288.      __near, __far, __huge, and __based with Static Data Objects
  1289.      -----------------------------------------------------------
  1290.  
  1291.      Online Help for __near, __far, __huge, and __based says that these
  1292.      keywords modify data objects. More precisely, they modify static
  1293.      data objects (variables with file scope, or static local variables),
  1294.      not automatic variables.
  1295.  
  1296. ==================< Part 11: Notes on "CL.HLP" (Help) >===================
  1297.  
  1298.      The second paragraph in the following MPC error message should read
  1299.      as follows:
  1300.  
  1301.      MP1083 segment overflow writing p-code tables in segment <segment>
  1302.  
  1303.             Reduce the size of the given segment and relink. If you are
  1304.             generating a Windows executable or are using the LINK /PACKC
  1305.             option, you must reserve enough space for the p-code tables
  1306.             with the LINK /PACKC:<number> option. The <number> specifies
  1307.             the maximum size of a code segment--63488 bytes (64K minus 
  1308.             512 bytes) is recommended.
  1309.  
  1310.      The following NMAKE error is not documented in Help or in the printed
  1311.      documentation:
  1312.  
  1313.      U1059  syntax error : '}' missing in dependent
  1314.  
  1315.             A search path for a dependent was incorrectly specified.
  1316.             Either a space existed in the path or the closing brace (})
  1317.             was omitted. The syntax for a directory specification for a
  1318.             dependent is:
  1319.  
  1320.                  {directories}dependent
  1321.  
  1322.             where <directories> specifies one or more paths, each
  1323.             separated by a semicolon (;). No spaces are allowed.
  1324.  
  1325.             If part or all of a search path is replaced by a macro, be
  1326.             sure that no spaces exist in the macro expansion.
  1327.  
  1328. =======================< Part 12: Notes on "LINK" >=======================
  1329.  
  1330.      The /PCODE option for LINK is not documented in Help for LINK or
  1331.      in the printed documentation. The /PCODE option tells LINK to
  1332.      call the Make P-Code (MPC) utility after linking. If you link a
  1333.      p-code program using LINK instead of using CL, you must use /PCODE
  1334.      to generate a valid executable file.
  1335.  
  1336.      Section 3.4 of the "Programming Techniques" manual (page 53) contains
  1337.      information on how to manually link p-code programs.
  1338.  
  1339. ===================< Part 13: Notes on Header Files >=====================
  1340.  
  1341.      Correction to Function Definition 
  1342.      ---------------------------------
  1343.  
  1344.      The inline definition of istream::getline(signed char *, int, char)
  1345.      is missing "_fGline++;" This omission will cause the getline function 
  1346.      to behave like the get function in all cases. Replace the definition
  1347.      with the following:
  1348.  
  1349.      inline istream& istream::getline(char _HFAR_ * _b,int  \
  1350.        _lim,char _delim) { _fGline++; return get(_b, _lim, _delim); }
  1351.      inline istream& istream::getline(unsigned char _HFAR_ *  \
  1352.        _b,int _lim,char _delim) { _fGline++; return get((char _HFAR_ \
  1353.        *)_b, _lim, _delim); }
  1354.      inline istream& istream::getline(signed char _HFAR_ *
  1355.        _b,int _lim,char _delim) { _fGline++; return get((char _HFAR_ *)_b, \
  1356.        _lim, _delim); }
  1357.  
  1358.      Missing Modifier in Prototypes
  1359.      ------------------------------
  1360.  
  1361.      The set_new_handler prototypes in the NEW.H include file are missing 
  1362.      the __cdecl modifier.  The correct prototypes are:
  1363.  
  1364.      _PNH __cdecl _set_new_handler( _PNH );
  1365.      _PNH __cdecl _set_nnew_handler( _PNH );
  1366.      _PNH __cdecl _set_fnew_handler( _PNH );
  1367.      _PNHH __cdecl _set_hnew_handler( _PNHH );
  1368.      _PNHB __cdecl _set_bnew_handler( _PNHB );
  1369.  
  1370. ===< Part 14: Notes on "Microsoft Class Libraries" Quick-Reference Card >===
  1371.  
  1372.      The chart should show that class CMDIFrameWnd is derived from
  1373.      CFrameWnd instead of CWnd. This change should also be made to the
  1374.      chart on pages 90 and 91 of the "Class Libraries Reference" book.
  1375.  
  1376. ==========================================================================
  1377.  
  1378.      Microsoft, MS, MS-DOS, CodeView and QuickC are registered trademarks,
  1379.      and Windows is a trademark of Microsoft Corporation.
  1380.  
  1381.      UNIX is a registered trademark of American Telephone & Telegraph
  1382.      Company.
  1383.