home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / JRCPP.ZIP / DIAGNOST.DOC next >
Text File  |  1990-03-27  |  142KB  |  2,657 lines

  1.     JRCPP DIAGNOSTIC MESSAGE REFERENCE MANUAL (3/23/90)
  2.  
  3.  
  4.  
  5.     Copyright (C) 1990 James Roskind, All rights reserved. Permission 
  6.     is  granted  to copy and distribute this file as part any machine 
  7.     readable archive containing the entire, unmodified, JRCPP  PUBLIC 
  8.     DISTRIBUTION PACKAGE (henceforth call the "Package").  The set of 
  9.     files that form the Package are described in the README file that 
  10.     is  a  part  of the Package.  Permission is granted to individual 
  11.     users of the Package to copy individual portions of  the  Package 
  12.     (i.e.,  component  files) in any form (e.g.: printed, electronic, 
  13.     electro-optical, etc.) desired  for  the  purpose  of  supporting 
  14.     users   of  the  Package  (i.e.,  providing  online,  or  onshelf 
  15.     documentation access; executing the  binary  JRCPP  code,  etc.).  
  16.     Permission  is  not  granted  to  distribute copies of individual 
  17.     portions of the Package, unless a machine readable version of the 
  18.     complete  Package  is also made available with such distribution. 
  19.     Abstracting with credit is permitted.   There  is  no  charge  or 
  20.     royalty  fee  required  for  copies  made in compliance with this 
  21.     notice.  To otherwise copy  elements  of  this  package  requires 
  22.     prior permission in writing from James Roskind.
  23.  
  24.     James Roskind
  25.     516 Latania Palm Drive
  26.     Indialantic FL 32903
  27.  
  28.     End of copyright notice
  29.  
  30.  
  31. What  the  above  copyright  means  is  that  you are free to use and 
  32. distribute (or even sell) the entire set of files  in  this  Package, 
  33. but  you  can't split them up, and distribute them as separate files.  
  34. The notice also says that you  cannot  modify  the  copies  that  you 
  35. distribute, and this ESPECIALLY includes NOT REMOVING the any part of 
  36. the copyright notice in any file.  JRCPP  currently  implements  a  C 
  37. Preprocessor,  but  the  users  of  this Package do NOT surrender any 
  38. right of ownership or copyright to any source text that is  processed 
  39. by JRCPP, either before or after processing.  Similarly, there are no 
  40. royalty or fee requirements for using the post-preprocessed output of 
  41. JRCPP.  
  42.  
  43. This  Package is expected to be distributed by shareware and freeware 
  44. channels (including BBS sites), but the fees paid for  "distribution" 
  45. costs  are  strictly  exchanged  between  the  distributor,  and  the 
  46. recipient, and James Roskind makes no express or  implied  warranties 
  47. about  the  quality  or integrity of such indirectly acquired copies.  
  48. Distributors  and  users  may  obtain   the   Package   (the   Public 
  49. distribution form) directly from the author by following the ordering 
  50. procedures in the REGISTRATION file.
  51.  
  52.  
  53. DISCLAIMER:
  54.  
  55. JAMES ROSKIND PROVIDES THIS FILE "AS  IS"  WITHOUT  WARRANTY  OF  ANY 
  56. KIND,  EITHER  EXPRESS  OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE 
  57. IMPLIED WARRANTIES OF MERCHANTABILITY OR  FITNESS  FOR  A  PARTICULAR 
  58. PURPOSE.   THE  ENTIRE  RISK AS TO THE QUALITY AND PERFORMANCE OF THE 
  59. PROGRAM AND DOCUMENTATION IS WITH YOU.   Some  states  do  not  allow 
  60. disclaimer  of express or implied warranties in certain transactions, 
  61. therefore, this statement may not apply to you.
  62.  
  63.  
  64. UNIX is a registered trademark of AT&T Bell Laboratories.
  65. ____________________________________________________________________
  66.  
  67.  
  68.  
  69.     JRCPP DIAGNOSTIC MESSAGE REFERENCE MANUAL (3/23/90)
  70.  
  71.  
  72. INTRODUCTION
  73.  
  74. The term "diagnostic messages" is meant to be a generalization of the 
  75. concept  of  "error  messages".  Diagnostic  messages are any sort of 
  76. message that is communicated from the C  Preprocessor  to  the  user.  
  77. The  most  common  cause  of  a diagnostic message is an error in the 
  78. source code.  Other messages carry information ranging from stylistic 
  79. commentary   (e.g.:   "found   '/*'  with  comment"),  or  procedural 
  80. commentary (e.g.: "header file  was  found  in  ...  directory"),  to 
  81. catastrophic operating systems problems (e.g.: "out of memory").
  82.  
  83. This  section  begins  with  a  description of the diagnostic message 
  84. system, and the meaning of the various diagnostic levels.   A  second 
  85. section  provides  a  complete  list  of  the  170+  actual  messages 
  86. currently supported, sorted by diagnostic  number.  A  third  section 
  87. provides  a  listing of the messages sorted by diagnostic level.  The 
  88. last  section  offers  a  detailed  explanation  for  each  supported 
  89. messages.
  90.  
  91.  
  92. DIAGNOSTIC MESSAGES- OVERVIEW
  93.  
  94.  
  95. JRCPP  has  a  fixed list of diagnostic messages, each of which has a 
  96. corresponding number.  To  be  complete,  diagnostics  consist  of  a 
  97. default  severity  level, an error number, and a textual message. The 
  98. possible severity levels include F (fatal), E (error), W (warning), H 
  99. (hint),  and  S  (silent).  Error messages numbers range from 1001 to 
  100. 9999.   Text  of  the  messages  is  typically  less  than  about  60 
  101. characters.   When  a  message  is  actually submitted to the user, a 
  102. source line number, file name, and relevant text is typically  added, 
  103. which brings the entire message line to typically over 80 characters.  
  104. The format of the diagnostics is  modeled  after  common  C  compiler 
  105. error messaging systems, and standard tools should be able to process 
  106. the diagnostics.
  107.  
  108. One concept that is novel to this JRCPP is  the  distinction  between 
  109. the  "default  severity  level"  associated  with  a message, and its 
  110. "actual severity level", which is computed  when  the  diagnostic  is 
  111. generated.   This  fundamental separation permits users to change the 
  112. "actual severity level" of  any  diagnostic  message.  With  no  user 
  113. intervention,  the  "actual  severity level" is the "default severity 
  114. level", and the user can rely on  the  "factory  settings"  for  each 
  115. message.   In  many  other  compilers a user is permitted to change a 
  116. threshold or "warning level" in the compiler, in order to change  the 
  117. response   to  the  fixed  set  of  diagnostics.   In  contrast,  the 
  118. thresholds for response to diagnostics are fixed in  JRCPP,  but  the 
  119. user  is  permitted  to  changed  the  severity  level  of any of the 
  120. diagnostics.   The  ability  to  change  the  level  associated  with 
  121. individual  messages allows the user to customize the compiler to the 
  122. individual needs of a project,  and  even  to  specific  sections  of 
  123. source code.
  124.  
  125. In  order  to  support a mechanism that is similar to the traditional 
  126. "warning level" setting in other compilers, the  severity  levels  of 
  127. whole  groups  of diagnostics with similar severities can be adjusted 
  128. at once.  In addition, since the levels can be adjusted in the source 
  129. code (via #pragma diagnostic_adjust ...) it is possible to vary these 
  130. levels at distinct points in the program (for example:  reducing  the 
  131. diagnostic  scrutiny  ONLY during the inclusion of a header file that 
  132. is know to be "non-standard" in style and  content).  Adjustment  can 
  133. range from preventing a bothersome message from appearing at all, all 
  134. the way to the other extreme of forcing the preprocessor to  stop  as 
  135. soon as a certain diagnostic is generated.
  136.  
  137.  
  138. The   "#pragma  adjust_diagnostic  ..."  directive  can  be  used  to 
  139. customize  the  run  time  diagnostic  levels  associated  with  each 
  140. message.   It  can  either  change  the  diagnostic levels of all the 
  141. diagnostics that share a common level  (e.g.:  change  all  "warning" 
  142. diagnostics  to  "error"  diagnostics), or it can specifically change 
  143. the diagnostic level of a specific message.  See  the  discussion  of 
  144. this under PRAGMA DIRECTIVES, for details of its use.
  145.  
  146.  
  147. DIAGNOSTIC MESSAGES- SEVERITY LEVELS
  148.  
  149. As mentioned earlier, the possible severity levels include F (fatal), 
  150. E (error), W (warning), H (hint), and S  (silent).   This  subsection 
  151. discusses  the  meaning of each level, along with the philosophy used 
  152. to establish default severity levels.
  153.  
  154. "Fatal" level messages can be expected to terminate the preprocessing 
  155. operation immediately.  Moreover, there is generally no facility (via 
  156. pragmas) to diminish the diagnostic level of a  message  that  has  a 
  157. "fatal"  default severity. Messages are only given a default level of 
  158. fatal if: 1) there appears to be no reasonably way  to  recover  from 
  159. the  condition;  or  2)  recovery  from the error could inadvertently 
  160. damage extraneous files.  Examples of  unrecoverable  errors  include 
  161. "out  of  memory",  and  "cannot  open source file".  An example of a 
  162. fatal error based upon the second principle is  "unexpected  argument 
  163. on  command  line".   If there is an extra argument, then it is quite 
  164. possible that the proposed output file is  **NOT**  the  output  file 
  165. that  the  user  desired, but is instead an input file!!  Rather than 
  166. risking damage to a user's file, a fatal diagnostic is provided,  and 
  167. preprocessing ceases.
  168.  
  169. "Error"  level  messages  indicate  that a significant error has been 
  170. detected, but recovery seems possible, and reasonable.   Due  to  the 
  171. severity  of  the error, no preprocessed output will be produced, but 
  172. preprocessing  will  continue  and  additional  diagnostics  may   be 
  173. generated.   Default  settings  of  diagnostics  to "Error" generally 
  174. indicate a violation of the ANSI C standard,  and  hence  a  lack  of 
  175. "consistent"  portability (i.e.: this is a good chance that some ANSI 
  176. C compiler will be totally unable to process the source  file).   The 
  177. error recovery that is provided by JRCPP is targeted at compatibility 
  178. with prior art that a "Classic C"  preprocessor  might  provide,  and 
  179. failing  that, at almost any reasonable error recovery.  For example, 
  180. if a totally unrecognized directive is encountered, it was "probably" 
  181. a  misspelling  of  a  well  defined  directive.  The  simplest error 
  182. recovery strategy is to "ignore" it completely (this also gives  some 
  183. sense  of  compatibility  with  future language definitions, or other 
  184. "nonstandard" preprocessors). If the user is  satisfied  enough  with 
  185. the  recovery, then "#pragma diagnostic ..." directive may be used to 
  186. downgrade the level (to a warning or silent) in order to  obtain  the 
  187. preprocessed  output.   It  should be clearly understood however that 
  188. the source code  that  triggers  diagnostic  with  default  level  of 
  189. "error",  might  not  be  preprocessed  identically  by  other ANSI C 
  190. preprocessors.
  191.  
  192. "Warning" level messages indicate that a possibility exists that  the 
  193. user  has  made  an error in the source code.  Generally only totally 
  194. legal constructs are given a default level of warning.  For  example, 
  195. since  comments  do not nest, the presence of a "/*" within a comment 
  196. is  syntactically  of  no  consequence.   Based  on  popular   coding 
  197. experience,  the  presence  of  a "/*" within a comment is usually an 
  198. indication that a prior comment was accidentally not closed (and that 
  199. source  code  between  the  two comments is being lost).  It is quite 
  200. common for extremely cautious users to upgrade  all  "warning"  level 
  201. messages to "error" level in order to guarantee the cleanest of code.
  202.  
  203. "Silent"  level messages should not be confused with such concepts as 
  204. "ignore".  Message are only given a default level of "silent"  if  it 
  205. is  believed  that the diagnostic will have almost no practical value 
  206. to code diagnosis, and hence  it  should  be  suppressed.   Moreover, 
  207. there  is  generally  no  error  recovery needed for default "silent" 
  208. level messages.  The most common use of the "silent" level  is  by  a 
  209. user,  as  it provides a category to place a "warning" that occurs so 
  210. often in the diagnostic listing that it clutters the listing.
  211.  
  212. The only default "silent" diagnostics are messages that are generally 
  213. of no significance to the user.  However, in some debugging scenarios 
  214. it is often desirable for a user to be made aware of actions taken by 
  215. the  preprocessor,  that  should in general, be ignored. Such actions 
  216. are given a default level of "silent", and a user may choose to raise 
  217. these  levels  in order to make the activities visible. An example of 
  218. this class of message  is  notification  of  where  the  preprocessor 
  219. looked to find an include file.  Typically, the preprocessor looks in 
  220. several places before finding a file, and the user may  wish  to  see 
  221. the exact list of directories searched.
  222.  
  223. The  existence  of  a  "silent"  level  allows  a user to downgrade a 
  224. diagnostic that would otherwise distract code development.  When  the 
  225. preprocessor generates a diagnostic, it must generally establish some 
  226. meaning for the questionable code, and support its error recovery  by 
  227. whatever  actions  are  deemed  appropriate.   This error recovery is 
  228. performed independent of the diagnostic level that is  reassigned  to 
  229. the  message  by  the  user.   Most simply put, changing a message to 
  230. "silent" level only prevents the user from seeing the message, and it 
  231. does not change the activities of the preprocessor.
  232.  
  233. "Hint" level messages indicate a severity somewhere between "warning" 
  234. and "silent".  A diagnostic with level "hint" will appear  the  first 
  235. time  the  problem  is  encountered,  but will then change its actual 
  236. severity level to "silent", and hence never appear again.  This class 
  237. of diagnostics are very useful when it is significant to the user (at 
  238. least as significant as a warning) that something has been noted, but 
  239. it can be expected that TOO MANY other occurrences of this triggering 
  240. construct will be diagnosed, and the  diagnostic  file  would  become 
  241. cluttered.   If this category were not present, the user would either 
  242. be forced to endure endless counts  of  notification  of  a  specific 
  243. diagnostic,  or  else  never  receive  notification of a problem.  An 
  244. example of the use of default level  "hint"  is  the  presence  of  a 
  245. backslash  in  an include file name.  If the user is using this (ANSI 
  246. undefined, but JRCPP accepted) construct, then it is likely that  the 
  247. user  will  repeat this construct in each #include statement.  With a 
  248. default level of hint, this construct will only be diagnosed once.
  249.  
  250. A user may chose to change the severity level of some diagnostics  to 
  251. a  hint  level to remove their dominance from the diagnostic listing, 
  252. without accepting them as commonplace  and  silencing  them  totally.  
  253. For example, if a user has source code that makes use of $ characters 
  254. in identifier names, then it is typically sufficient to  be  notified 
  255. the  first  time  this occurs that the construct is in use, but it is 
  256. desirable  that  no  further  notification  be  given  (i.e.:   avoid 
  257. notification   at  each  occurrence  of  the  offending  identifier).  
  258. Similarly, if it is desirable to reduce the number of  warning  level 
  259. diagnostics produced by JRCPP, all the default level "warning" can be 
  260. changed to "hint", and then each message will occurs at most once  in 
  261. the diagnostic listing.
  262.  
  263.  
  264. In summary: Fatal  ==> stop immediately
  265.         Error  ==> stop after complete error check of source
  266.         Warning==> continue, but notify user
  267.             Hint   ==> continue, but notify the user the first time only
  268.         Silent ==> continue, and don't notify user
  269.  
  270.  
  271. DIAGNOSTIC MESSAGES- CONCISE LIST, SORTED BY DIAGNOSTIC NUMBER
  272.  
  273.  
  274. W, 1001, "preserve comment option not supported"
  275. E, 1002, "complex macro predefinition not supported"
  276. E, 1003, "cannot predefine non-identifier"
  277. E, 1004, "unable to predefine macro"
  278. W, 1005, "dependency collection option not yet supported"
  279. E, 1006, "command line option 'p' not supported"
  280. E, 1008, "unrecognized command line option; use -U to undefine macros"
  281. E, 1009, "attempt to undef non-identifier"
  282. W, 1011, "option to restrict names to 8 characters is not supported"
  283. E, 1012, "directory name required"
  284. E, 1013, "unrecognized option"
  285. F, 1014, "unable to open source file"
  286. F, 1015, "output file cannot be the same as input file"
  287. F, 1016, "output file cannot have '.c' postfix"
  288. F, 1017, "unexpected argument on command line"
  289. E, 1018, "identifiers must begin with a letter or '_'"
  290. E, 1018, "identifiers must begin with a letter or '_'"
  291. E, 1019, "valid identifier must contain only alphanumeric or '_'"
  292. E, 1020, "file name in environment variable is too large"
  293. W, 1021, "support for non-ANSI // comments provided"
  294. W, 1022, "__STDC__ definition has been removed"
  295. W, 1023, "ANSI standard macros have been undefined"
  296.  
  297.  
  298. E, 2001, "final new line in file is hidden by backslash"
  299. E, 2002, "new line inserted at end of file"
  300. E, 2003, "missing comment terminator '*/' at end of file"
  301.  
  302.  
  303. W, 3001, "found "/*" within standard comment"
  304. E, 3002, "illegal vertical whitespace translated to spaces"
  305. E, 3003, "identifier includes '$' character"
  306. W, 3004, "multicharacter character constants not supported"
  307. E, 3005, "character constant missing close quote (')"
  308. E, 3006, "string literal contains invalid escape sequence(s)"
  309. E, 3007, "string literal missing close quote (")"
  310. W, 3008, "illegal character in source stream"
  311. E, 3009, "identifier includes '$' character"
  312. E, 3010, "multicharacter character constants not supported"
  313. E, 3011, "unable to form single token out of character(s)"
  314. E, 3012, "Wide string literal cannot be used as file name"
  315. W, 3013, "escape sequences other than `\\' are not honored in #line directives"
  316. E, 3014, "no text present in file name"
  317. E, 3015, "loss of precision during conversion"
  318. E, 3016, "loss of precision during conversion"
  319. E, 3017, "unable to open preprocessed output file"
  320. E, 3018, "missing terminator on file name"
  321. E, 3019, "file name terminator is not at right end of token"
  322. H, 3020, "#include file name contains "/*" sequence"
  323. H, 3021, "#include file name contains '\' character"
  324. H, 3022, "#include file name contains "'" character"
  325. E, 3023, "invalid file name token in #include directive"
  326. H, 3024, "#include <...> file name contains `"' character"
  327. E, 3025, "cannot open include file"
  328. E, 3026, "existing macro definition being overwritten"
  329. S, 3027, "trying to open include file in ancestor's directory"
  330. S, 3028, "include file found using ancestral path"
  331. S, 3029, "trying to open include file independent of ancestors"
  332. S, 3030, "include file found without ancestral dependence"
  333. F, 3031, "OS reports two input files cannot be opened"
  334. H, 3032, "file temporarily closed"
  335. F, 3033, "unable to temporarily close file"
  336. F, 3034, "OS failure in ftell prevented extension of #include nesting"
  337. F, 3035, "unable to reopen file"
  338. F, 3036, "unable to reposition in file after reopening"
  339. E, 3037, "Unsupported wide character constant translation ignored"
  340. E, 3038, "nil character constant evaluated as single quote  '\'' "
  341. E, 3039, "invalid character constant evaluated in if/elif directive"
  342. E, 3040, "multicharacter character constant truncated during evaluation"
  343. S, 3041, "application include file opened"
  344. S, 3042, "system include file opened"
  345. W, 3043, "found "*/" in "//" style comment"
  346. W, 3044, "found "/*" within standard comment in inactive code"
  347. W, 3045, "found "/*" within "//" style comment"
  348. W, 3046, "found "/*" within "//" style comment in inactive code"
  349. S, 3047, ""//*" may be misunderstood under C++"
  350. W, 3048, ""//*" would be misparsed without "//" style comments"
  351. W, 3049, "illegal vertical whitespace ignored in inactive code"
  352. S, 3050, "identifier includes '$' character in inactive code"
  353. W, 3051, "multicharacter character constant encountered in inactive code"
  354. W, 3052, "character constant missing close quote in inactive code (')"
  355. W, 3053, "string literal in inactive code is missing close quote (")"
  356. W, 3054, "illegal character in inactive code in source stream"
  357. W, 3055, "string literal in inactive code contains invalid escape sequence(s)"
  358. E, 3056, "character constant has no characters"
  359. W, 3057, "character constant in inactive code has no characters"
  360.  
  361.  
  362.  
  363. E, 4001, "unrecognized or unmatched preprocessor directive"
  364. E, 4002, "missing #endif for #if group"
  365. E, 4003, "missing expression for #if directive, FALSE assumed"
  366. E, 4004, "missing identifier name in #ifdef directive, FALSE assumed"
  367. E, 4005, "missing identifier name in #ifndef directive, TRUE assumed"
  368. E, 4006, "syntax error in #if directive, FALSE assumed"
  369. E, 4007, "syntax error in #ifdef directive, FALSE assumed"
  370. E, 4008, "syntax error in #ifndef directive, TRUE assumed"
  371. E, 4009, "missing expression for #elif directive, FALSE assumed"
  372. E, 4010, "syntax error in #elif directive, FALSE assumed"
  373. E, 4011, "unexpected token(s) on line after #else"
  374. W, 4012, "unexpected token(s) on line after #endif"
  375. E, 4013, "missing file name in #include directive"
  376. E, 4016, "unexpected token(s) following file name in #include directive"
  377. E, 4017, "missing line number and file in #line directive"
  378. E, 4018, "first token in #line directive is not a line number"
  379. E, 4019, "second token in #line directive is not a string literal (file name)"
  380. E, 4020, "unexpected 3rd token in #line directive"
  381. E, 4021, "#error encountered; no message provided"
  382. W, 4022, "#pragma missing specification tokens"
  383. E, 4023, "parameter list in macro definition not complete"
  384. E, 4024, "missing identifier name in #define"
  385. E, 4025, "invalid #define directive"
  386. E, 4026, "unexpected token(s) following identifier in #undef"
  387. E, 4027, "non-identifier in #undef directive"
  388. E, 4028, "missing identifier name in #undef"
  389. E, 4029, "syntax error in preprocessor scan"
  390. E, 4030, "syntax error in expanded #if/#elif expression, FALSE assumed"
  391. E, 4031, "syntax error at end of expanded #if/#elif expression, FALSE assumed"
  392. E, 4032, "cannot #define keyword 'defined'"
  393. E, 4033, "cannot #define internal macro name"
  394. E, 4034, "non-benign macro redefinition ignored"
  395. E, 4035, "cannot #define keyword 'defined'"
  396. E, 4036, "cannot #define internal macro name"
  397. E, 4037, "non-benign macro redefinition ignored"
  398. E, 4038, "cannot #undef keyword 'defined'"
  399. E, 4039, "attempted #undef of internal macro ignored"
  400. E, 4040, "function like macro missing ')' after arguments"
  401. E, 4041, "macro has whitespace argument"
  402. E, 4042, "extra arguments to macro ignored"
  403. E, 4043, "macro has solo whitespace argument"
  404. E, 4044, "not enough arguments for macro, whitespace arguments supplied"
  405. E, 4045, "operator '##' ignored at start of replacement list"
  406. E, 4046, "operator '##' ignored at end of replacement list"
  407. E, 4047, "'##' operator followed by '##' operator in macro replacement list"
  408. E, 4048, "'#' operator applied to whitespace"
  409. E, 4049, "operator '##' illegal at start of replacement list"
  410. E, 4050, "operator '#' illegal at end of replacement list"
  411. E, 4051, "operator '#' not followed by a macro parameter"
  412. E, 4052, "operator '##' illegal at end of replacement list"
  413. E, 4053, "line number in #line directive must be between 1 and 32767"
  414. W, 4054, "expected integer or diagnostic level"
  415. W, 4055, "expected 'silent', 'hint', 'warning', or 'error'"
  416. W, 4056, "diagnostic numbers are between 1001 and 9999"
  417. W, 4057, "expected diagnostic number, or severity level"
  418. W, 4058, "expected 'fatal', 'error', 'warning' 'hint' or 'silent'"
  419. W, 4059, "expected ancestral selection and/or 'current_directory'"
  420. E, 4060, "unrecognized pragma undefine_macros selector"
  421. W, 4061, "expected expected 'ANSI', 'platform', 'command_line', or 'user'"
  422. E, 4062, "unrecognized pragma after_output_dump selector"
  423. W, 4063, "expected 'profile' or 'macros'"
  424. W, 4064, "expected 'off', or 'on' (the default is 'on')"
  425. W, 4065, "expected 'off', or 'on' (the default is 'on')"
  426. W, 4066, "expected 'off', or 'on' (the default is 'on')"
  427. W, 4067, "expected 'off', or 'on' (the default is 'on')"
  428. W, 4068, "expected 'off', or 'on' (the default is 'on')"
  429. W, 4069, "unexpected token(s) at end of pragma line ignored"
  430. S, 4070, "benign redefinition of manifest macro ignored"
  431. S, 4071, "benign redefinition of function-like macro ignored"
  432. S, 4072, "macro #undef action undertaken"
  433. W, 4073, "consecutive paste operators in macro definition"
  434. E, 4074, "line number must be a digit sequences only"
  435. W, 4075, "keyword 'defined' evaluated as 0 in if/elif directive"
  436. E, 4076, "scanner limitation: too many characters in pasted string"
  437. S, 4077, "macro #undef requested for undefined identifier"
  438. H, 4078, "use of bulk undefine may limit portability"
  439. H, 4079, "use of bulk undefine may limit portability"
  440. H, 4080, "use of bulk undefine may limit portability"
  441.  
  442.  
  443. E, 5001, "#error encountered"
  444. W, 5002, "unrecognized #pragma"
  445. E, 5003, "unexpected token(s) on #ifdef line ignored"
  446. E, 5004, "unexpected token(s) on #ifndef line ignored"
  447. E, 5005, "neither <...> nor "..." style include found"
  448. W, 5006, "cannot change 'fatal' default diagnostic level"
  449. H, 5007, "diagnostic display may be diminished"
  450. E, 5008, "only one ancestral path selection is allowed"
  451. H, 5009, "non-ANSI C behavior requested"
  452. H, 5010, "non-ANSI C behavior requested"
  453. H, 5011, "non-ANSI C behavior requested"
  454. H, 5012, "non-ANSI C behavior requested"
  455. H, 5013, "non-ANSI C behavior requested"
  456.  
  457.  
  458. F, 6001, "lexical scanner reading source: ...message..."
  459. F, 6002, "lexical scanner reading pasted text: ...message..."
  460. F, 6003, "preprocessing token parser error"
  461. E, 6004, "#if/elif evaluated false due to: yacc stack overflow"
  462. F, 6005, "out of memory. Object requested was "
  463. F, 6006, "out of memory during character pool reallocation"
  464. F, 6007, "out of memory during concatenation operation"
  465. F, 6008, "out of memory during stringize operation"
  466. F, 6009, "out of memory while unquoting file name"
  467. F, 6010, "out of memory while extracting name in include directive"
  468. F, 6011, "out of memory while extracting directory prefix"
  469. E, 6012, "#if/elif evaluated false due to division by zero"
  470. E, 6013, "#if/elif evaluated false due to modulus of zero"
  471.  
  472.  
  473. DIAGNOSTIC MESSAGES GROUPED BY DEFAULT SEVERITY
  474.  
  475. DIAGNOSTICS WITH DEFAULT SEVERITY OF FATAL ERROR
  476. F, 1014, "unable to open source file"
  477. F, 1015, "output file cannot be the same as input file"
  478. F, 1016, "output file cannot have '.c' postfix"
  479. F, 1017, "unexpected argument on command line"
  480. F, 3031, "OS reports two input files cannot be opened"
  481. F, 3033, "unable to temporarily close file"
  482. F, 3034, "OS failure in ftell prevented extension of #include nesting"
  483. F, 3035, "unable to reopen file"
  484. F, 3036, "unable to reposition in file after reopening"
  485. F, 6001, "lexical scanner reading source: ...message..."
  486. F, 6002, "lexical scanner reading pasted text: ... message..."
  487. F, 6003, "preprocessing token parser error"
  488. F, 6005, "out of memory. Object requested was "
  489. F, 6006, "out of memory during character pool reallocation"
  490. F, 6007, "out of memory during concatenation operation"
  491. F, 6008, "out of memory during stringize operation"
  492. F, 6009, "out of memory while unquoting file name"
  493. F, 6010, "out of memory while extracting name in include directive"
  494. F, 6011, "out of memory while extracting directory prefix"
  495.  
  496. DIAGNOSTICS WITH DEFAULT SEVERITY OF ERROR
  497. E, 1002, "complex macro predefinition not supported"
  498. E, 1003, "cannot predefine non-identifier"
  499. E, 1004, "unable to predefine macro"
  500. E, 1006, "command line option 'p' not supported"
  501. E, 1008, "unrecognized command line option; use -U to undefine macros"
  502. E, 1009, "attempt to undef non-identifier"
  503. E, 1012, "directory name required"
  504. E, 1013, "unrecognized option"
  505. E, 1018, "identifiers must begin with a letter or '_'"
  506. E, 1018, "identifiers must begin with a letter or '_'"
  507. E, 1019, "valid identifier must contain only alphanumeric or '_'"
  508. E, 1020, "file name in environment variable is too large"
  509. E, 2001, "final new line in file is hidden by backslash"
  510. E, 2002, "new line inserted at end of file"
  511. E, 2003, "missing comment terminator '*/' at end of file"
  512. E, 3002, "illegal vertical whitespace translated to spaces"
  513. E, 3003, "identifier includes '$' character"
  514. E, 3005, "character constant missing close quote (')"
  515. E, 3006, "string literal contains invalid escape sequence(s)"
  516. E, 3007, "string literal missing close quote (")"
  517. E, 3009, "identifier includes '$' character"
  518. E, 3010, "multicharacter character constants not supported"
  519. E, 3011, "unable to form single token out of character(s)"
  520. E, 3012, "Wide string literal cannot be used as file name"
  521. E, 3014, "no text present in file name"
  522. E, 3015, "loss of precision during conversion"
  523. E, 3016, "loss of precision during conversion"
  524. E, 3017, "unable to open preprocessed output file"
  525. E, 3018, "missing terminator on file name"
  526. E, 3019, "file name terminator is not at right end of token"
  527. E, 3023, "invalid file name token in #include directive"
  528. E, 3025, "cannot open include file"
  529. E, 3026, "existing macro definition being overwritten"
  530. E, 3037, "Unsupported wide character constant translation ignored"
  531. E, 3038, "nil character constant evaluated as single quote  '\'' "
  532. E, 3039, "invalid character constant evaluated in if/elif directive"
  533. E, 3040, "multicharacter character constant truncated during evaluation"
  534. E, 3056, "character constant has no characters"
  535. E, 4001, "unrecognized or unmatched preprocessor directive"
  536. E, 4002, "missing #endif for #if group"
  537. E, 4003, "missing expression for #if directive, FALSE assumed"
  538. E, 4004, "missing identifier name in #ifdef directive, FALSE assumed"
  539. E, 4005, "missing identifier name in #ifndef directive, TRUE assumed"
  540. E, 4006, "syntax error in #if directive, FALSE assumed"
  541. E, 4007, "syntax error in #ifdef directive, FALSE assumed"
  542. E, 4008, "syntax error in #ifndef directive, TRUE assumed"
  543. E, 4009, "missing expression for #elif directive, FALSE assumed"
  544. E, 4010, "syntax error in #elif directive, FALSE assumed"
  545. E, 4011, "unexpected token(s) on line after #else"
  546. E, 4013, "missing file name in #include directive"
  547. E, 4016, "unexpected token(s) following file name in #include directive"
  548. E, 4017, "missing line number and file in #line directive"
  549. E, 4018, "first token in #line directive is not a line number"
  550. E, 4019, "second token in #line directive is not a string literal (file name)"
  551. E, 4020, "unexpected 3rd token in #line directive"
  552. E, 4021, "#error encountered; no message provided"
  553. E, 4023, "parameter list in macro definition not complete"
  554. E, 4024, "missing identifier name in #define"
  555. E, 4025, "invalid #define directive"
  556. E, 4026, "unexpected token(s) following identifier in #undef"
  557. E, 4027, "non-identifier in #undef directive"
  558. E, 4028, "missing identifier name in #undef"
  559. E, 4029, "syntax error in preprocessor scan"
  560. E, 4030, "syntax error in expanded #if/#elif expression, FALSE assumed"
  561. E, 4031, "syntax error at end of expanded #if/#elif expression, FALSE assumed"
  562. E, 4032, "cannot #define keyword 'defined'"
  563. E, 4033, "cannot #define internal macro name"
  564. E, 4034, "non-benign macro redefinition ignored"
  565. E, 4035, "cannot #define keyword 'defined'"
  566. E, 4036, "cannot #define internal macro name"
  567. E, 4037, "non-benign macro redefinition ignored"
  568. E, 4038, "cannot #undef keyword 'defined'"
  569. E, 4039, "attempted #undef of internal macro ignored"
  570. E, 4040, "function like macro missing ')' after arguments"
  571. E, 4041, "macro has whitespace argument"
  572. E, 4042, "extra arguments to macro ignored"
  573. E, 4043, "macro has solo whitespace argument"
  574. E, 4044, "not enough arguments for macro, whitespace arguments supplied"
  575. E, 4045, "operator '##' ignored at start of replacement list"
  576. E, 4046, "operator '##' ignored at end of replacement list"
  577. E, 4047, "'##' operator followed by '##' operator in macro replacement list"
  578. E, 4048, "'#' operator applied to whitespace"
  579. E, 4049, "operator '##' illegal at start of replacement list"
  580. E, 4050, "operator '#' illegal at end of replacement list"
  581. E, 4051, "operator '#' not followed by a macro parameter"
  582. E, 4052, "operator '##' illegal at end of replacement list"
  583. E, 4053, "line number in #line directive must be between 1 and 32767"
  584. E, 4060, "unrecognized pragma undefine_macros selector"
  585. E, 4062, "unrecognized pragma after_output_dump selector"
  586. E, 4074, "line number must be a digit sequences only"
  587. E, 4076, "scanner limitation: too many characters in pasted string"
  588. E, 5001, "#error encountered"
  589. E, 5003, "unexpected token(s) on #ifdef line ignored"
  590. E, 5004, "unexpected token(s) on #ifndef line ignored"
  591. E, 5005, "neither <...> nor "..." style include found"
  592. E, 5008, "only one ancestral path selection is allowed"
  593. E, 6004, "#if/elif evaluated false due to: yacc stack overflow"
  594. E, 6012, "#if/elif evaluated false due to division by zero"
  595. E, 6013, "#if/elif evaluated false due to modulus of zero"
  596.  
  597. DIAGNOSTICS WITH DEFAULT SEVERITY OF WARNING
  598. W, 1001, "preserve comment option not supported"
  599. W, 1005, "dependency collection option not yet supported"
  600. W, 1011, "option to restrict names to 8 characters is not supported"
  601. W, 1021, "support for non-ANSI // comments provided"
  602. W, 1022, "__STDC__ definition has been removed"
  603. W, 1023, "ANSI standard macros have been undefined"
  604. W, 3001, "found "/*" within standard comment"
  605. W, 3004, "multicharacter character constants not supported"
  606. W, 3008, "illegal character in source stream"
  607. W, 3013, "escape sequences other than `\\' are not honored in #line directives"
  608. W, 3043, "found "*/" in "//" style comment"
  609. W, 3044, "found "/*" within standard comment in inactive code"
  610. W, 3045, "found "/*" within "//" style comment"
  611. W, 3046, "found "/*" within "//" style comment in inactive code"
  612. W, 3048, ""//*" would be misparsed without "//" style comments"
  613. W, 3049, "illegal vertical whitespace ignored in inactive code"
  614. W, 3051, "multicharacter character constant encountered in inactive code"
  615. W, 3052, "character constant missing close quote in inactive code (')"
  616. W, 3053, "string literal in inactive code is missing close quote (")"
  617. W, 3054, "illegal character in inactive code in source stream"
  618. W, 3055, "string literal in inactive code contains invalid escape sequence(s)"
  619. W, 3057, "character constant in inactive code has no characters"
  620. W, 4012, "unexpected token(s) on line after #endif"
  621. W, 4022, "#pragma missing specification tokens"
  622. W, 4054, "expected integer or diagnostic level"
  623. W, 4055, "expected 'silent', 'hint', 'warning', or 'error'"
  624. W, 4056, "diagnostic numbers are between 1001 and 9999"
  625. W, 4057, "expected diagnostic number, or severity level"
  626. W, 4058, "expected 'fatal', 'error', 'warning' 'hint' or 'silent'"
  627. W, 4059, "expected ancestral selection and/or 'current_directory'"
  628. W, 4061, "expected expected 'ANSI', 'platform', 'command_line', or 'user'"
  629. W, 4063, "expected 'profile' or 'macros'"
  630. W, 4064, "expected 'off', or 'on' (the default is 'on')"
  631. W, 4065, "expected 'off', or 'on' (the default is 'on')"
  632. W, 4066, "expected 'off', or 'on' (the default is 'on')"
  633. W, 4067, "expected 'off', or 'on' (the default is 'on')"
  634. W, 4068, "expected 'off', or 'on' (the default is 'on')"
  635. W, 4069, "unexpected token(s) at end of pragma line ignored"
  636. W, 4073, "consecutive paste operators in macro definition"
  637. W, 4075, "keyword 'defined' evaluated as 0 in if/elif directive"
  638. W, 5002, "unrecognized #pragma"
  639. W, 5006, "cannot change 'fatal' default diagnostic level"
  640.  
  641. DIAGNOSTICS WITH DEFAULT SEVERITY OF HINT
  642. H, 3020, "#include file name contains "/*" sequence"
  643. H, 3021, "#include file name contains '\' character"
  644. H, 3022, "#include file name contains "'" character"
  645. H, 3024, "#include <...> file name contains `"' character"
  646. H, 3032, "file temporarily closed"
  647. H, 4078, "use of bulk undefine may limit portability"
  648. H, 4079, "use of bulk undefine may limit portability"
  649. H, 4080, "use of bulk undefine may limit portability"
  650. H, 5007, "diagnostic display may be diminished"
  651. H, 5009, "non-ANSI C behavior requested"
  652. H, 5010, "non-ANSI C behavior requested"
  653. H, 5011, "non-ANSI C behavior requested"
  654. H, 5012, "non-ANSI C behavior requested"
  655. H, 5013, "non-ANSI C behavior requested"
  656.  
  657. DIAGNOSTICS WITH DEFAULT SEVERITY OF SILENT
  658. S, 3027, "trying to open include file in ancestor's directory"
  659. S, 3028, "include file found using ancestral path"
  660. S, 3029, "trying to open include file independent of ancestors"
  661. S, 3030, "include file found without ancestral dependence"
  662. S, 3041, "application include file opened"
  663. S, 3042, "system include file opened"
  664. S, 3047, ""//*" may be misunderstood under C++"
  665. S, 3050, "identifier includes '$' character in inactive code"
  666. S, 4070, "benign redefinition of manifest macro ignored"
  667. S, 4071, "benign redefinition of function-like macro ignored"
  668. S, 4072, "macro #undef action undertaken"
  669. S, 4077, "macro #undef requested for undefined identifier"
  670.  
  671.  
  672.  
  673. DIAGNOSTIC MESSAGES- EXPLANATIONS AND USER RESPONSES
  674.  
  675. W, 1001, "preserve comment option not supported"
  676.     
  677.     The   command   line   option   "-C"  is  understood  by  some  C 
  678.     preprocessors  as  a  request   to   preserve   comments   during 
  679.     preprocessing.   This  option  is not supported by this facility.  
  680.     See "BUGS/FEATURES" for more details.
  681.  
  682. E, 1002, "complex macro predefinition not supported"
  683.  
  684.     The command line option "-Didentifier=token"  was  supplied,  but 
  685.     the "token" is not a "simple single token".  The "token" supplied 
  686.     was either a nil string ("-Didentifier="), or it was  an  invalid 
  687.     preprocessing  token,  or  it consisted of multiple tokens (e.g.: 
  688.     "-Didentifier=a+b").  The command  line  can  only  be  used  for 
  689.     defining  a  token  to be "1" by default (e.g.: "-Didentifier" is 
  690.     equivalent to "-Didentifier=1"), or to define  a  manifest  macro 
  691.     with a replacement list that consists of a single token.
  692.  
  693. E, 1003, "cannot predefine non-identifier"
  694.  
  695.     The  command  line  option "-Didentifier" or "-Didentifier=token" 
  696.     was supplied, but "identifier" is not a  valid  identifier  name.  
  697.     Valid  names  begin  with  a letter (a-z or A-Z) or an underscore 
  698.     ("_"), and continue with a sequence of letters, underscores,  and 
  699.     digits  (1-9).  An additional error message (1018 or 1019) should 
  700.     provide further description of the nature of the problem.
  701.  
  702. E, 1004, "unable to predefine macro"
  703.  
  704.     The command line option  "-Didentifier"  or  "-Didentifier=token" 
  705.     was   supplied,   but   the   predefinition  was  NOT  performed.  
  706.     Additional  error  messages  should  provide  details   of   what 
  707.     prevented the definition.
  708.  
  709. W, 1005, "dependency collection option not yet supported"
  710.  
  711.     The  command line option "-M" is understood by some preprocessors 
  712.     to mean that a list of dependent files (e.g.: header  files  that 
  713.     were  included)  should  be  listed.   This  option  is  used  to 
  714.     automatically create dependency  files  for  facilities  such  as 
  715.     "make".     This   option   will   be   supported   "soon",   see 
  716.     "BUGS/FEATURES" for details.
  717.  
  718. E, 1006, "command line option 'p' not supported"
  719.  
  720.     The command line option "-p" is taken by  some  preprocessors  to 
  721.     limit  examination  of  identifier  names to 8 characters, and to 
  722.     flag extraneous tokens on "#else", and "#endif" lines as  errors.  
  723.     The  above  errors  are  always  detected, but this option is not 
  724.     supported.
  725.  
  726. ?, 1007, ""
  727.  
  728.     There is no error 1007.
  729.  
  730. E, 1008, "unrecognized command line option; use -U to undefine macros"
  731.  
  732.     A command line option  (a  string  beginning  with  a  "-u")  was 
  733.     supplied,  but the characters that followed did not correspond to 
  734.     any known options.  Use the "-help" option to get a valid list of 
  735.     available options.  Also note that the "-U" option can be used to 
  736.     undefine specific macro identifiers.
  737.  
  738. E, 1009, "attempt to undef non-identifier"
  739.  
  740.     The  command  line  option  "-Uidentifier"  was   supplied,   but 
  741.     "identifier"  is  not a valid identifier name.  Valid names begin 
  742.     with a letter (a-z or A-Z) or an underscore ("_"),  and  continue 
  743.     with  a  sequence  of  letters, underscores, and digits (1-9). An 
  744.     additional error message (1018 or 1019)  should  provide  further 
  745.     description of the nature of the problem.
  746.  
  747. ?, 1010, ""
  748.  
  749.     There is no error 1010.
  750.  
  751. W, 1011, "option to restrict names to 8 characters is not supported"
  752.  
  753.     The  command line option "-T" is understood by some preprocessors 
  754.     to restrict the significance of identifiers names to 8 characters 
  755.     (other   characters  would  be  ignored).   This  option  is  not 
  756.     supported.
  757.  
  758.  
  759. E, 1012, "directory name required"
  760.  
  761.     When supplied, this directory name will be appended to the end of 
  762.     the   list  of  directory  names  that  were  acquired  from  the 
  763.     environment  variable  "INCLUDE".  Unlike  the  traditional   cpp 
  764.     counterpart,  the "-Y" option to JRCPP requires a directory name, 
  765.     and does not "replace" the existing search list.  This  augmented 
  766.     list  of  directories  extends  the  search  path for <...> style 
  767.     (a.k.a. system) include directives, as  well  as  "...."  (a.k.a. 
  768.     standard)  include  directives.  See also the command line option 
  769.     "-I", and the discussion  of  the  #include  directive,  and  the 
  770.     searching algorithm used.
  771.  
  772. E, 1013, "unrecognized option"
  773.  
  774.     A  command  line  option  (a  string  beginning  with  a "-") was 
  775.     supplied, but the characters that followed did not correspond  to 
  776.     any known options.  Use the "-help" option to get a valid list of 
  777.     available options.
  778.  
  779. F, 1014, "unable to open source file"
  780.  
  781.     The first argument on the command line that does not begin with a 
  782.     "-"  is  assumed to be the source text file. The preprocessor was 
  783.     unable to open the file specified.   Note  that  if  no  file  is 
  784.     specified, then standard input is used to obtain the source text.
  785.  
  786. F, 1015, "output file cannot be the same as input file"
  787.  
  788.     The  first  two command line arguments that do not begin with "-" 
  789.     are assumed to be the source (input) file  and  the  preprocessed 
  790.     (output)  file.   The  two  names  supplied are the same, and the 
  791.     result would have been that the source file would be destroyed by 
  792.     the  preprocessing  execution.   Generally, this is a user error, 
  793.     and in order to prevent loss of data,  such  overwriting  is  not 
  794.     permitted.
  795.  
  796. F, 1016, "output file cannot have '.c' postfix"
  797.  
  798.     The  second command line argument that does not begin with "-" is 
  799.     assumed to be the file to which preprocessed data is written.  To 
  800.     prevent  a  user from (incorrectly) assuming that several C files 
  801.     can be preprocessed at the same time, with the **BAD** result  of 
  802.     overwriting  the user's own source file, an output file name with 
  803.     the common source postfix ".c" is NOT permitted.  If such a  name 
  804.     is  desired,  the  user should either write to an alternate name, 
  805.     and then rename the resulting file, or should use redirection  of 
  806.     standard  output  (the  default output destination) to create the 
  807.     file.
  808.  
  809. F, 1017, "unexpected argument on command line"
  810.  
  811.     The presence of a command line argument that does not begin  with 
  812.     a  "-" marks the end of the list of options, and the beginning of 
  813.     the list of file names (source input, followed optionally  by  an 
  814.     output  file  name).  No other arguments should be present on the 
  815.     command line beyond this point, but  the  indicated  (extraneous) 
  816.     argument was found.
  817.  
  818. E, 1018, "identifiers must begin with a letter or '_'"
  819.  
  820.     A command line option provided an "identifier", that did not meet 
  821.     the requirements of an  ANSI  C  identifier.   Specifically,  the 
  822.     first character was neither a letter nor an underscore ("_").
  823.  
  824. E, 1019, "valid identifier must contain only alphanumeric or '_'"
  825.  
  826.     A command line option provided an "identifier", that did not meet 
  827.     the requirements of an ANSI  C  identifier.   Specifically,  some 
  828.     character  was  neither  a  letter nor an underscore ("_"), nor a 
  829.     digit.
  830.  
  831. E, 1020, "file name in environment variable is too large"
  832.  
  833.     The environment variable "INCLUDE" is supposed to contain  a  ";" 
  834.     delimited  list  of directories to search for include files.  One 
  835.     of those directory names exceeded the  static  (sorry,  for  this 
  836.     limit,  but  I  doubt  that  it  will bother anyone) limit on the 
  837.     length of a directory provided  via  this  environment  variable.  
  838.     The  limit  is  currently  511 characters (four times the longest 
  839.     legal line length under MSDOS!?!).  Usually this error is  caused 
  840.     by  the  presence of a long environment variable called "INCLUDE" 
  841.     that  is  actually  **NOT**  a  list  of  directory  names.   See 
  842.     "BUGS/FEATURES".
  843.  
  844.  
  845. W, 1021, "support for non-ANSI // comments provided"
  846.  
  847.     The "-B" option was supplied on the command line, and as a result 
  848.     the C++ style comments beginning with  "//"  will  be  supported.  
  849.     Note  that  this  acceptance is not generally compatible with the 
  850.     ANSI C standard. This diagnostic is present in  order  to  comply 
  851.     with  the  ANSI  C  Standard that all errors produce at least one 
  852.     diagnostic message (and since "//" style comments **MIGHT**  hide 
  853.     some code, this message is always provided).
  854.  
  855. W, 1022, "__STDC__ definition has been removed"
  856.  
  857.     The  command  line  option "-undef" was supplied, and as a result 
  858.     all platform specific macros as well as __STDC__ have  had  their 
  859.     definition  removed.   Note  that  the  internal macros __LINE__, 
  860.     __FILE__, __DATE__, and __TIME__ are not effected by this option.  
  861.     Finer  granularity  of removal of these internally defined macros 
  862.     by the "#pragma undefine_macros ...".  This diagnostic is present 
  863.     in  order  to  comply  with  the  ANSI C Standard that all errors 
  864.     produce at least one diagnostic message (and  since  this  option 
  865.     allows  the identifier __STDC__ to be used in a define directive, 
  866.     ANSI C violations **MIGHT** be missed later).
  867.  
  868. W, 1023, "ANSI standard macros have been undefined"
  869.  
  870.     The command line option  "-undefANSI"  was  provided,  and  as  a 
  871.     result  the  internal  macros  __LINE__,  __FILE__, __DATE__, and 
  872.     __TIME__ have had their definitions removed. This  diagnostic  is 
  873.     present  in  order  to  comply  with the ANSI C Standard that all 
  874.     errors produce at least one diagnostic  message  (and  since  the 
  875.     macro names that are removed by this mechanism can now become the 
  876.     legal subject of #define  and  #undef  directives,  such  ANSI  C 
  877.     violations **MIGHT** be missed later).
  878.  
  879.  
  880.  
  881. E, 2001, "final new line in file is hidden by backslash"
  882.  
  883.     Source  files  must  either be empty, or end in a carriage return 
  884.     that is **NOT** logically removed by a preceding backslash.   The 
  885.     indicated  file ends with a new line, but the preceding character 
  886.     was a backslash. The backslash should be removed.
  887.  
  888. E, 2002, "new line inserted at end of file"
  889.  
  890.     All source files must either be empty, or end  in  either  a  new 
  891.     line.  The indicated file has a final character that is not a new 
  892.     line.  An empty new line should be added to the end of the file.
  893.  
  894. E, 2003, "missing comment terminator '*/' at end of file"
  895.  
  896.     The end of file was reached, but a comment was started ("/*") and 
  897.     has  not  yet  ended.   Since  all comments are translated into a 
  898.     single white space, this error may lead to fairly bizarre errors.  
  899.     For  example, if the unterminated comment was initiated on a line 
  900.     with a directive, then tokens following the eventual  termination 
  901.     of  the  comment  will  appear  logically  on  the  line with the 
  902.     directive!?!? To rectify this error, close the comment.  Although 
  903.     the  implementation  is CAPABLE OF closing this comment when this 
  904.     error occurs, it  was  decided  that  a  **BIZARRE**  user  might 
  905.     actually  relish  this performance, and so the comment is **NOT** 
  906.     automatically closed.
  907.  
  908. W, 3001, "found "/*" within standard comment"
  909.  
  910.     Since standard "/*" based comments do not nest, a "/*"  within  a 
  911.     comment  has  no  major significance.  The most common reason for 
  912.     this diagnostic is that the user forgot to close a prior comment, 
  913.     and  a "/*" indicating the start of a new comment has been found!  
  914.     IF this was the reason for the error, then  it  is  quite  likely 
  915.     that  some  code  has  also  inadvertently  been  commented  out.  
  916.     Without this diagnostic such simple user errors in C are **VERY** 
  917.     difficult  to  locate.   As  is suggested by the presence of this 
  918.     diagnostic, users should typically not  have  "/*"  within  their 
  919.     comments, and this diagnostic can then prove most valuable.  If a 
  920.     user wishes temporarily remove  a  block  of  code,  rather  than 
  921.     enclosing it in a "/*" based comment, the preprocessor directives 
  922.     "#if 0" and "#endif" are suggested  to  enclose  the  block  (and 
  923.     these constructs **DO** nest).
  924.  
  925. E, 3002, "illegal vertical whitespace translated to spaces"
  926.  
  927.     After  a "#" near the start of a line (preceded only by arbitrary 
  928.     whitespace),  the  preprocessor   scans   for   a   preprocessing 
  929.     directive.  This  directive  is  terminated  by a newline, and is 
  930.     permitted   to   contain   arbitrary   amounts   of   "horizontal 
  931.     whitespace".   "Horizontal  whitespace"  includes horizontal tabs 
  932.     and spaces (and equivalently  comments).  In  contrast,  vertical 
  933.     whitespace,    such    as    a    page-feed,   vertical-tab,   or 
  934.     carriage-return, is **NOT** permitted AFTER THE #.  Note that  it 
  935.     is  very  difficult to read a listing that has a page feed in the 
  936.     middle of a preprocessing directive!  This error  indicates  that 
  937.     vertical  whitespace  has  be  detected, and it has been replaced 
  938.     with spaces.
  939.  
  940. E, 3003, "identifier includes '$' character"
  941.  
  942.     The  ANSI  C  standard  clearly  defines  what   constitutes   an 
  943.     identifier  as an alphabetic or underscore character, followed by 
  944.     a  sequence  of  alphanumeric  or  underscore  characters.   Some 
  945.     machine language implementations make extensive use of the "$" as 
  946.     part  of  external   identifiers.    As   a   consequence,   this 
  947.     preprocessor  flags  such  a  character in the source stream, but 
  948.     scans it in as a complete identifier name. Notice that outside of 
  949.     single  and  double  quotes,  the  source  character  "$"  is not 
  950.     permitted to be a part of any  standard  token,  and  hence  this 
  951.     (clearly  noted)  extension  does not interfere with any standard 
  952.     ANSI C constructs.
  953.  
  954.     For the language lawyers, it should be noted that a $ is actually 
  955.     a  valid  preprocessing  token  in  its  own  right.   Hence  the 
  956.     "perfect" ANSI C preprocessor would not consider it to be part of 
  957.     the  adjacent  identifier(s).   Note  that this exposed character 
  958.     does not form a valid token (for parsing), and hence it  must  be 
  959.     destroyed or formed into a part of a valid token somewhere during 
  960.     preprocessing  activities  (e.g.:  destroyed  because  it  is  an 
  961.     argument  to a macro that is not used; made part of a valid token 
  962.     by being stringized as part of a macro  expansion).  The  current 
  963.     version  of  JRCPP supports the interpretation that a $ character 
  964.     defaults to be part of an  identifier,  but  future  versions  of 
  965.     JRCPP may require an explicit option to support this feature.
  966.  
  967.  
  968. W, 3004, "multicharacter character constants not supported"
  969.  
  970.     A  character  constant is a single quote, followed by a non-empty 
  971.     list of escape sequences  or  characters,  and  terminated  by  a 
  972.     single  quote  (example:  '\n').  Although the standard specifies 
  973.     what the interpretation of character constants containing exactly 
  974.     one  escape  sequence  or  character,  the  ANSI  C  standard  is 
  975.     specifically vague in its description of the meaning of  multiple 
  976.     characters  (Intel and Motorola architectures generally differ in 
  977.     their interpretation of such constants!).  As a result,  portable 
  978.     code  SHOULD  NOT make use of character constants containing more 
  979.     than one escape sequence or character in a single constant  (this 
  980.     has to do, in most cases, with either interpreting such constants 
  981.     as "'ab'" as being the same  as  either  "(256*'a'+'b')",  OR  as 
  982.     being  the  same  as "(256*'b'+'a')"). Although this preprocessor 
  983.     will  process  (as  part  of  source  text)  multiple   character 
  984.     constants   as   would   be  expected,  the  interpretation  when 
  985.     evaluating "#if" and  "#elif"  directives  does  ***NOT***  honor 
  986.     characters  after the first.  Hence for example, "'AB'" is valued 
  987.     identically  "'A'"  or  "'Aanything'"  during  preprocessor   #if 
  988.     evaluation.   It  is  suggested  that you avoid such not portable 
  989.     constructs, and beware of  odd  performance  in  the  context  of 
  990.     preprocessor if directives.
  991.  
  992. E, 3005, "character constant missing close quote (')"
  993.  
  994.     Character   constants   are   delimited  by  single  quote  ("'") 
  995.     characters, and must lie entirely on a single  line.  The  source 
  996.     text contains a single quote character which marks the start of a 
  997.     character constant, but there is no corresponding close quote  on 
  998.     the  same  line.   This  is  typically  a  typo,  but can also be 
  999.     instigated by such text as "'\'".  If the user wanted a backslash 
  1000.     character,  then the source text should have contained "'\\'", to 
  1001.     provide the single character.  In  contrast,  the  text  "'\'..." 
  1002.     provides  a  starting  "'",  followed by the ***ESCAPED*** single 
  1003.     quote character "\'", followed by all the remainder  of  text  on 
  1004.     that  line.  To correct this error either add the forgotten close 
  1005.     quote, or properly "escape out" the backslash that  precedes  the 
  1006.     desired close quote.
  1007.  
  1008. E, 3006, "string literal contains invalid escape sequence(s)"
  1009.  
  1010.     String  literals  are delimited by double quotes ("), and contain 
  1011.     source  characters  and  escape  sequences.   The  valid   escape 
  1012.     sequences  include  "simple escape" sequences such as '\a', '\b', 
  1013.     '\f', '\n', '\r', '\t', '\v', '\'', '\"', '\?', and '\\', as well 
  1014.     as   octal   and  hexadecimal  escape  sequences.   Octal  escape 
  1015.     sequences are of the form '\d', or \'dd', or '\ddd', where 'd' is 
  1016.     an  octal  digit  between  0 and 7 inclusive.  Hexadecimal escape 
  1017.     sequences begin with the sequence '\x', and consist of 1 or  more 
  1018.     additional  alphanumeric  characters.   The presence of any other 
  1019.     backslash combinations is considered an error,  even  though  the 
  1020.     sequence is passed correctly through the preprocessor.
  1021.  
  1022. E, 3007, "string literal missing close quote (")"
  1023.  
  1024.     String  literals are delimited by double quotes ("), and must lie 
  1025.     entirely on a single line.  This diagnostic  indicates  that  the 
  1026.     end of the line was reached and the close quote was not provided.  
  1027.     Note that the escape sequence '\"' can be used to  represent  the 
  1028.     quote character in an escape sequence, and prevent interpretation 
  1029.     of the final quote  as  a  delimiter.   For  example,  '"slash=/, 
  1030.     backslash=\"'  does  not  have  a terminating quote.  The correct 
  1031.     form of the  above  example  is  '"slash=/,  backslash=\\"'.   To 
  1032.     correct  this problem, either add the missing quote, or un-escape 
  1033.     the terminating quote.
  1034.  
  1035. W, 3008, "illegal character in source stream"
  1036.  
  1037.     A character was found in a source file that cannot be part of any 
  1038.     preprocessing  token,  in  the  context  of  its occurrence.  For 
  1039.     example, the backslash character "\" is not part of  any  lexical 
  1040.     token  when  it  is  outside  of  a  string  literal or character 
  1041.     constant.  If this lone character is not discarded (such  as  via 
  1042.     #if  exclusion)  or manipulated into an actual token (such as via 
  1043.     the stringize operator #), then  this  character  will  cause  an 
  1044.     error during the phases of compilation FOLLOWING preprocessing.
  1045.  
  1046. E, 3009, "identifier includes '$' character"
  1047.  
  1048.     This  error  message  is  produced  after  a  macro expansion has 
  1049.     required pasting of two tokens (re: the  ##  operator),  and  the 
  1050.     resulting  character  sequence is a non-standard identifier.  See 
  1051.     diagnostic 3003 for more details.
  1052.  
  1053. E, 3010, "multicharacter character constants not supported"
  1054.  
  1055.     This diagnostic message is produced after a macro  expansion  has 
  1056.     required  pasting  of  two  tokens (re: the ## operator), and the 
  1057.     resulting character sequence is a multicharacter  constant.   See 
  1058.     diagnostic 3004 for more details.
  1059.  
  1060. E, 3011, "unable to form token out of character(s)"
  1061.  
  1062.     This  diagnostic  message is produced after a macro expansion has 
  1063.     required pasting of two tokens (re: the  ##  operator),  and  the 
  1064.     resulting  character sequence does not form a single preprocessor 
  1065.     token.  The character sequence will be passed forward  correctly, 
  1066.     but  these results are not guaranteed to be supported on all ANSI 
  1067.     C conforming preprocessors.
  1068.  
  1069.  
  1070. E, 3012, "Wide string literal cannot be used as file name"
  1071.  
  1072.     An attempt was made to use a wide string literal as the name of a 
  1073.     source file (e.g.: `#line 8 L"name" ').  Since the interpretation 
  1074.     of wide string literals is implementation  dependent,  and  JRCPP 
  1075.     does  not  provide  an interpretation for them, this construct is 
  1076.     poorly defined within JRCPP.  JRCPP will attempt to interpret the 
  1077.     string  literal  as though it were not a wide string literal, but 
  1078.     proper interpretation  cannot  be  guaranteed.   The  only  major 
  1079.     significance  of  this confusion is that the #line directives (if 
  1080.     any) that are  inserted  in  the  post-preprocessed  output  will 
  1081.     **NOT**  have notations to indicate that a wide string literal us 
  1082.     being used.
  1083.  
  1084. W, 3013, "escape sequences other than `\\' are not honored  in  #line 
  1085. directives"
  1086.  
  1087.     An escape sequence other than "\\" was found within a  file  name 
  1088.     specified  in  a  #line directive.  The name provided in a user's 
  1089.     #line directive is potentially used to form a  name  in  a  #line 
  1090.     directive  provided  in  the the output (post-preprocessed) file, 
  1091.     and is also used to identify the location of  a  construct  in  a 
  1092.     diagnostic  message. Since such sequences as "\n", if interpreted 
  1093.     as escape sequences, would corrupt the output #line directives as 
  1094.     well  as  the  format  of  diagnostic  messages.  JRCPP skips the 
  1095.     backslash that initiates the escape sequence as the file name  is 
  1096.     scanned.  Note that the "\\" sequence is the only escape sequence 
  1097.     honored in a file name string supplied in a #line directive.
  1098.  
  1099. E, 3014, "no text present in file name"
  1100.  
  1101.     A #include directive provided  a  file  name  that  had  no  text 
  1102.     between the delimiters (e.g.: `#include "" ', or `#include <> ').  
  1103.     A file name is required in a #include directive.
  1104.  
  1105. E, 3015, "loss of precision during conversion"
  1106.  
  1107.     The translation  of  the  digit  sequence  provided  in  a  #line 
  1108.     directive  caused  an  overflow.   This  number  supplied is well 
  1109.     beyond the range guaranteed by the ANSI C standard (a maximum  of 
  1110.     32767),  and  moreover,  beyond  the  supported  range  of  JRCPP 
  1111.     (typically a "signed long" on most architectures).
  1112.  
  1113. E, 3016, "loss of precision during conversion"
  1114.  
  1115.     The translation  of  the  digit  sequence  provided  in  a  #line 
  1116.     directive  caused  an  overflow.   This  number  supplied is well 
  1117.     beyond the range guaranteed by the ANSI C standard (a maximum  of 
  1118.     32767),  and  moreover,  beyond  the  supported  range  of  JRCPP 
  1119.     (typically a "signed long" on most architectures).
  1120.  
  1121. E, 3017, "unable to open preprocessed output file"
  1122.  
  1123.     An attempt was made to open the  output  file  specified  in  the 
  1124.     command  line, but the operating system call failed.  Check to be 
  1125.     sure that the file name is valid for your operating system,  that 
  1126.     access  permission  is  provided  to the specified directory, and 
  1127.     that access is permitted to the specific file name (i.e.: that  a 
  1128.     file  by  the  same  name  is  not  already  in  place  AND write 
  1129.     protected).  Additionally,  there  may  be  restrictions  on  the 
  1130.     number of open files permitted from the current session, and this 
  1131.     limit should (when all else fails) be consulted.
  1132.  
  1133. E, 3018, "missing terminator on file name"
  1134.  
  1135.     An attempt was  made  to  combine  the  tokens  provided  on  the 
  1136.     #include  line  to form a valid include file name (e.g.: <...> or 
  1137.     "...").  None of the tokens contained the necessary terminator (> 
  1138.     or "). The #include directive has been ignored.
  1139.  
  1140. E, 3019, "file name terminator is not at right end of token"
  1141.  
  1142.     Although  the  left  most  section  of  the  text  of the include 
  1143.     directive contains a standard file  name  form  (e.g.:  <...>  or 
  1144.     "..."),  there is some additional text beyond the end of the file 
  1145.     name sequence.  This text has been ignored.
  1146.  
  1147. H, 3020, "#include file name contains "/*" sequence"
  1148.  
  1149.     A #include directive contains a file name that has  the  sequence 
  1150.     `/*'  embedded  within  it.  Such characters cause implementation 
  1151.     defined behavior.  JRCPP simply accepts such  sequences  as  they 
  1152.     are  supplied.  Since  this  sequence  is VERY rarely a part of a 
  1153.     valid file  name,  the  user  is  advised  to  verify  that  such 
  1154.     placement was intentional.
  1155.  
  1156. H, 3021, "#include file name contains '\' character"
  1157.  
  1158.     A  #include directive contains a file name that has the character 
  1159.     `\' within it.   Such  characters  cause  implementation  defined 
  1160.     behavior.  JRCPP accepts such backslashes, but does **NOT** treat 
  1161.     them as the start of escape sequences.  For DOS/OS2 applications, 
  1162.     it is suggested that the equivalent (and generally more portable) 
  1163.     character `/` be used where a backslash is required as part of  a 
  1164.     path name.
  1165.  
  1166. H, 3022, "#include file name contains "'" character"
  1167.  
  1168.     A  #include directive contains a file name that has the character 
  1169.     "'" within it.   Such  characters  cause  implementation  defined 
  1170.     behavior.  JRCPP  accepts  such  characters  as  entered (i.e.: a 
  1171.     single quote).
  1172.  
  1173. E, 3023, "invalid file name token in #include directive"
  1174.  
  1175.     The "#include" directive expects that the tokens that  follow  it 
  1176.     are  (or  will  macro  expand  to)  one  of  the file name forms: 
  1177.     <file_name>, or "file_name".  This error indicates that the  form 
  1178.     was  not  correct, as should be apparent in the sample text given 
  1179.     with this  diagnostic.  Note  that  if  the  quoted  form  (i.e.: 
  1180.     "file_name")  is  used,  then the characters **in** the file name 
  1181.     cannot be quote characters. Similarly, if the angle bracket  form 
  1182.     (i.e.:  <file_name>)  is used, the characters in file_name cannot 
  1183.     include the closing angle bracket ">". This error is  NOT  caused 
  1184.     by a badly formed file name, or a file that cannot be found.
  1185.  
  1186. H, 3024, "#include <...> file name contains `"' character"
  1187.  
  1188.     A #include directive of the form <file_name> contains a file name 
  1189.     that has the double quote character `"' within it.  The  presence 
  1190.     of  this character causes implementation defined behavior.  JRCPP 
  1191.     accepts this character as part of the file name.
  1192.  
  1193. E, 3025, "cannot open include file"
  1194.  
  1195.     This message  indicates  that  the  file  name  selected  in  the 
  1196.     "#include"  directive either cannot be found, or cannot be opened 
  1197.     for reading (perhaps due to access restrictions). This error  may 
  1198.     be  caused by restrictions on the number of open files allowed by 
  1199.     the specific operating system, either in total, or on a  specific 
  1200.     (network) device.
  1201.  
  1202. E, 3026, "existing macro definition being overwritten"
  1203.  
  1204.     The  user  has  elected  to  substitute  the  internal macro name 
  1205.     __cplusplus for the ANSI C standard macro __STDC__ via (probably) 
  1206.     the    #pragma    cplusplus_mode   directive.    The   identifier 
  1207.     "__cplusplus"  was  already  defined  when  this  directive   was 
  1208.     provided,  and the old definition has been overwritten.  Note the 
  1209.     the identifier __cplusplus has also  attained  "special  internal 
  1210.     status", and can no longer be used in as the subject of a #define 
  1211.     or #undef directives.
  1212.  
  1213. S, 3027, "trying to open include file in ancestor's directory"
  1214.  
  1215.     A #include directive was specified, and a path prefix  was  taken 
  1216.     from  one  of the ancestral source files (e.g.: one of the source 
  1217.     files in the chain of #includes that led to this #include).   The 
  1218.     diagnostic  shows  the entire path and file name that was used in 
  1219.     the attempt to open the file.  This  directive  was  provided  to 
  1220.     allow  users  to  more clearly see the areas searched in order to 
  1221.     find an included file.   See  the  "#pragma  include_search  ..." 
  1222.     directive for details on how to control the search algorithm.
  1223.  
  1224. S, 3028, "include file found using ancestral path"
  1225.  
  1226.     A  file  specified  in  a  #include  directive was located in the 
  1227.     directory indicated.  Note that the path prefix for this filename 
  1228.     was  taken  from  one of the ancestral source files (e.g.: one of 
  1229.     the source files in the chain  of  #includes  that  led  to  this 
  1230.     #include).   Note  that this message is not produced if the basis 
  1231.     of the search was the "current directory", or  when  an  absolute 
  1232.     path  was provided. This directive was provided to allow users to 
  1233.     more clearly see the areas searched in order to find an  included 
  1234.     file.  See the "#pragma include_search ..." directive for details 
  1235.     on how to control the search algorithm.
  1236.  
  1237. S, 3029, "trying to open include file independent of ancestors"
  1238.  
  1239.     A #include directive was specified, and either an  absolute  path 
  1240.     was  created,  or  else  the  current  director  was used for the 
  1241.     search.  Note that  the  location  of  the  file  containing  the 
  1242.     #include  directive  (as  well  as  the inclusion ancestors) were 
  1243.     **NOT** involved in creating the path prefix for  this  attempted 
  1244.     opening  of  the file. This directive was provided to allow users 
  1245.     to more clearly see the  areas  searched  in  order  to  find  an 
  1246.     included  file.   See  the "#pragma include_search ..." directive 
  1247.     for details on how to control the search algorithm.
  1248.  
  1249. S, 3030, "include file found without ancestral dependence"
  1250.  
  1251.     A file specified in a  #include  directive  was  located  in  the 
  1252.     directory  indicated.   The  filename used was either an absolute 
  1253.     path/filename, or else the current directory was used. Note  that 
  1254.     the  path  prefix for this filename was not derived from the file 
  1255.     containing the  #include  directive  (or  any  of  the  ancestral 
  1256.     inclusion  source  files)  This  directive  was provided to allow 
  1257.     users to more clearly see the areas searched in order to find  an 
  1258.     included  file.   See  the "#pragma include_search ..." directive 
  1259.     for details on how to control the search algorithm.
  1260.  
  1261. F, 3031, "OS reports two input files cannot be opened"
  1262.  
  1263.     An attempt to open a  #include  file  has  been  refused  by  the 
  1264.     operating  system  with  an  explanation that "too many files are 
  1265.     open", despite the fact that ONLY one other source  (input)  file 
  1266.     is  currently  open.  JRCPP temporarily closes source files so as 
  1267.     not to be constrained by operating restrictions on the number  of 
  1268.     open  files.  JRCPP's requirements for open files are only stdin, 
  1269.     stdout, stderr, and at  most  two  source  input  files  (or  one 
  1270.     post-preprocessing  output file).  This error indicates that such 
  1271.     resources are not available to  JRCPP,  and  execution  has  been 
  1272.     terminated.   Check  to be sure that the configuration parameters 
  1273.     provided are not accidentally set at this incredibly  low  value. 
  1274.     There  may  also be restrictions due to the use of a network, and 
  1275.     the number of files that may be open across  the  network  (again 
  1276.     check  the configuration parameters).  In any case, the resources 
  1277.     should be made available to JRCPP, and the  preprocessing  should 
  1278.     be retried.
  1279.  
  1280. H, 3032, "file temporarily closed"
  1281.  
  1282.     The  level  of  nested #include files has grown large enough that 
  1283.     the operating system has declared that "too many files are open".  
  1284.     JRCPP   has   temporarily  closed  a  source  file  in  order  to 
  1285.     accommodate the operating system, but will reopen the  file  when 
  1286.     the  contents  must be scanned.  Since there are no static limits 
  1287.     on the depth of nested includes, this message may be a sign of an 
  1288.     "infinite  loop"  via  #include  directives.  Alternatively, this 
  1289.     message may just be a sign that the #include  nesting  is  large, 
  1290.     and  the  operating  system does not allow many files open at the 
  1291.     same time. If there is suspicion that the user may  have  induced 
  1292.     an  "infinite include loop", then the severity of this diagnostic 
  1293.     should be changed to "Warning", and the activities  can  be  more 
  1294.     clearly monitored.
  1295.  
  1296. F, 3033, "unable to temporarily close file"
  1297.  
  1298.     The operating system has refused to allow JRCPP to close a source 
  1299.     file.   The  indicated  source  file  needed  to  be  closed   to 
  1300.     accommodate  a restriction by the operating system that "too many 
  1301.     files were open", which became a problem when the level of nested 
  1302.     #include  directives  grew too large.  Since the operating system 
  1303.     refused to allow the  closing  of  the  file,  JRCPP  is  clearly 
  1304.     confused   about  what  is  going  on  in  the  environment,  and 
  1305.     preprocessing stops.  This should generally only be caused by  an 
  1306.     operating system error beyond the control of JRCPP.
  1307.  
  1308. F, 3034, "OS failure in ftell prevented extension of #include nesting"
  1309.  
  1310.     The operating system restriction of the number of nested #include 
  1311.     files has caused  JRCPP  to  consider  temporarily  closing  some 
  1312.     source  file.   Unfortunately,  the  operating  system  call that 
  1313.     reveals the current location in the source file has failed  (this 
  1314.     can  occur when the command line has specified that the source be 
  1315.     taken from standard input, rather than an actual file).
  1316.  
  1317. F, 3035, "unable to reopen file"
  1318.  
  1319.     The operating system restrictions on the number of files that may 
  1320.     be  open  at  one time has caused JRCPP to temporarily close some 
  1321.     source file.  When it was necessary to continue reading from that 
  1322.     source  file,  an attempt was made to reopen the source file, but 
  1323.     the operating system request failed.  This rather  unusual  error 
  1324.     should  only occur if the environment changed (e.g.: the file was 
  1325.     deleted  or  made  inaccessible)  while  the  source   file   was 
  1326.     temporarily  closed.   Retry  the preprocessing action, but avoid 
  1327.     changing the source files WHILE the preprocessor is scanning them.
  1328.  
  1329. F, 3036, "unable to reposition in file after reopening"
  1330.  
  1331.     The operating system restrictions on the number of files that may 
  1332.     be  open  at  one time has caused JRCPP to temporarily close some 
  1333.     source file.  When it was necessary to continue reading from that 
  1334.     source  file,  the  file  was  reopened, but the operating system 
  1335.     request to reposition the scan of the file where processing  left 
  1336.     off,  has failed.  This rather unusual error should only occur if 
  1337.     the environment changed (e.g.: the file was modified)  while  the 
  1338.     source  file  was  temporarily  closed.   Retry the preprocessing 
  1339.     action,  but  avoid  changing  the   source   files   WHILE   the 
  1340.     preprocessor is scanning them.
  1341.  
  1342. E, 3037, "Unsupported wide character constant translation ignored"
  1343.  
  1344.     A  #if  or  #elif  directive  required  the  evaluation of a wide 
  1345.     character  constant.   Since  the  meaning  of   wide   character 
  1346.     constants  (e.g.: L'...' ) is implementation dependent, and JRCPP 
  1347.     has no  definition  for  the  interpretation  of  wide  character 
  1348.     constants,  the  value  is  very likely to be other than what was 
  1349.     desired by the user.  The character constant will be evaluated as 
  1350.     though  it were an ordinary character constant (i.e.: the initial 
  1351.     "L" is ignored).
  1352.  
  1353. E, 3038, "nil character constant evaluated as single quote '\'' "
  1354.  
  1355.     A #if or #elif directive required the evaluation of  a  character 
  1356.     constant  that  consisted  of only two consecutive single quotes. 
  1357.     The value of the constant is taken to be that of a single  quote, 
  1358.     which is equivalent to: '\''
  1359.  
  1360. E, 3039, "invalid character constant evaluated in if/elif directive"
  1361.  
  1362.     A  #if  or #elif directive required the evaluation of a character 
  1363.     constant that was ill formed (it  did  not  include  the  closing 
  1364.     quote).    The   constant   has  been  interpreted  as  though  a 
  1365.     terminating quote was supplied.
  1366.  
  1367. E,  3040,  "multicharacter character constant truncated during evaluation"
  1368.  
  1369.     A #if or #elif directive required the evaluation of  a  character 
  1370.     constant  that  contained  more  than  a single character.  JRCPP 
  1371.     interprets  such  constants  as  having  a  value  equal  to  the 
  1372.     character  constant consisting of only the left most character in 
  1373.     the constant.  The behavior in this area is not  defined  by  the 
  1374.     ANSI  C  standard, and the results are notably non-portable.  See 
  1375.     diagnostic 3004 for more details.
  1376.  
  1377. S, 3041, "application include file opened"
  1378.  
  1379.     A #include directive of the  form  "file_name"  has  located  the 
  1380.     requested source file in the directory indicated.  Note that even 
  1381.     if the search algorithm required the use of the  "system  include 
  1382.     path",   any   file  requested  via  this  format  provides  this 
  1383.     diagnostic.  Note also that this diagnostic is silent by default, 
  1384.     an  will  not  appear  in  diagnostic  listings  unless a #pragma 
  1385.     diagnostic_adjust directive is used.
  1386.  
  1387. S, 3042, "system include file opened"
  1388.  
  1389.     A #include directive of the  form  <file_name>  has  located  the 
  1390.     requested source file in the directory indicated.  Note that this 
  1391.     diagnostic is silent by default, an will not appear in diagnostic 
  1392.     listings unless a #pragma diagnostic_adjust directive is used.
  1393.  
  1394. W, 3043, "found "*/" in "//" style comment"
  1395.  
  1396.     The  character  sequence  */  appears  within  a // style comment 
  1397.     (i.e.: a comment that begins with //, and continues to the end of 
  1398.     the  line). Since comments do not nest, the */ has no significant 
  1399.     whatever. However, an attempt to comment out a  series  of  lines 
  1400.     using  a /*...*/ style comment would be prematurely terminated by 
  1401.     this sequence.  This message is only a stylistic warning.
  1402.  
  1403. W, 3044, "found "/*" within standard comment in inactive code"
  1404.  
  1405.     Inactive  code  is  a  section  of  source  text  that   is   not 
  1406.     preprocessed   because   of   enclosing   conditional   inclusion 
  1407.     directives (such as #if ).  A /* was found while passing  over  a 
  1408.     comment  in  an  inactive  section  of code.  Note that this is a 
  1409.     common error in active code, as a failure to  close  one  comment 
  1410.     causes all source code up until the end of the next comment to be 
  1411.     discarded.  In an inactive code segment, this  stylistic  warning 
  1412.     might  is  still significant, as a comment can contain what would 
  1413.     otherwise be considered a preprocessing directive! Hence a #endif 
  1414.     might  be  accidentally  contained in an erroneously unterminated 
  1415.     comment.
  1416.  
  1417. W, 3045, "found "/*" within "//" style comment"
  1418.  
  1419.     The character sequences /* was found within a // style comment. A 
  1420.     //  style comment begins with //, and continues to the end of the 
  1421.     current line.  Since comments do not nest in  any  way,  this  /* 
  1422.     sequence (which would ordinarily indicate the start of a comment) 
  1423.     is ignored.  If the user has accidentally commented out (via  //) 
  1424.     the  start  of  a  /*...*/ style comment, then tokens on the next 
  1425.     line will be exposed (incorrectly) to preprocessing  scan.   This 
  1426.     warning is only a stylistic warning.
  1427.  
  1428. W, 3046, "found "/*" within "//" style comment in inactive code"
  1429.  
  1430.     Inactive   code   is  a  section  of  source  text  that  is  not 
  1431.     preprocessed   because   of   enclosing   conditional   inclusion 
  1432.     directives  (such as #if ).  The character sequences /* was found 
  1433.     within a // style comment within a section of inactive  code.   A 
  1434.     //  style comment begins with //, and continues to the end of the 
  1435.     current line.  Since comments do not nest in  any  way,  this  /* 
  1436.     sequence (which would ordinarily indicate the start of a comment) 
  1437.     is ignored.  If the user has accidentally commented out (via  //) 
  1438.     the  start  of  a  /*...*/ style comment, then tokens on the next 
  1439.     line will be exposed (incorrectly) to preprocessing scan, and can 
  1440.     confuse  the count of #if nesting if they happened to form a #if, 
  1441.     #else, ... etc. directive.  This  warning  is  only  a  stylistic 
  1442.     warning.
  1443.  
  1444. S, 3047, ""//*" may be misunderstood under C++"
  1445.  
  1446.     Although  //  style  comments  are  not  supported,  it may prove 
  1447.     desirable to support such in future ports of the user's code.   A 
  1448.     //  style  comment  begins with a //, and continues to the end of 
  1449.     the current line.  The user has accidentally provided one of  the 
  1450.     few  character  sequences  that make the use of // style comments 
  1451.     more difficult.  Specifically, the user has initiated  a  /*...*/ 
  1452.     style  comment  IMMEDIATELY after a divide operator ('/').  If // 
  1453.     style comments were supported,  this  tokens  sequence  would  be 
  1454.     misunderstood.   It is suggested that the user place at least one 
  1455.     blank character after the divide operator. This warning is only a 
  1456.     stylistic warning.
  1457.  
  1458. W, 3048, ""//*" would be misparsed without "//" style comments"
  1459.  
  1460.     In  the  indicated  section  of code, // style comments are being 
  1461.     supported. A // style comment begins with a //, and continues  to 
  1462.     the  end  of  the  line.  There  is  a chance that the code being 
  1463.     scanned has an example of the divide operator ('/')  followed  by 
  1464.     the  start  of  a /*...*/ style comment. This construct, although 
  1465.     EXTREMELY rare, can be found in ANSI  C  compliant  source  text.  
  1466.     Since  this  is  an  area  of  ambiguity between the new style // 
  1467.     comments, and  the  old  style  /*...*/  based  comments,  it  is 
  1468.     suggested   that   this   text   be   written  less  ambiguously.  
  1469.     Specifically, it is suggested that a space be placed after the // 
  1470.     start  of  comment,  and  before  the  *.   This  warning is on a 
  1471.     stylistic warning.
  1472.  
  1473. W, 3049, "illegal vertical whitespace ignored in inactive code"
  1474.  
  1475.     Vertical whitespace (such a vertical tab or  page  feed)  in  not 
  1476.     permitted  (according  to  the ANSI C Standard) to the right of a 
  1477.     `#' on a line that is interpreted as a  preprocessing  directive. 
  1478.     Inactive  code  is  a section of text that is not being processed 
  1479.     because of conditional inclusion directives (such  as  #if).   If 
  1480.     this  code  were  active,  this  whitespace  character would have 
  1481.     induced  an  error.   Note  that  vertical  whitespace   may   be 
  1482.     misconstrued  by  some  preprocessors as the end of the line, and 
  1483.     allow the characters that  follow  to  be  examined  as  possible 
  1484.     directive lines.  The user should replace such illegal whitespace 
  1485.     with horizontal whitespace such as "spaces", or "tabs".
  1486.  
  1487. S, 3050, "identifier includes '$' character in inactive code"
  1488.  
  1489.     Inactive  code  is  a  section  of  source  text  that   is   not 
  1490.     preprocessed   because   of   enclosing   conditional   inclusion 
  1491.     directives (such as #if ).  The `$' character has been  noted  as 
  1492.     part  of  an  identifier  in  a  section  of  inactive code.  See 
  1493.     diagnostic 3003 for more details.
  1494.  
  1495. W, 3051, "multicharacter character constant encountered in inactive code"
  1496.  
  1497.     Inactive   code   is  a  section  of  source  text  that  is  not 
  1498.     preprocessed   because   of   enclosing   conditional   inclusion 
  1499.     directives  (such  as  #if ).  Multicharacter character constants 
  1500.     contain more than one character or escape sequences within a pair 
  1501.     of  single quotes.  Such constructs are notable non portable, and 
  1502.     generally  avoided.   Occasionally  an   unterminated   character 
  1503.     constant is misconstrued for a multicharacter character constant. 
  1504.     See diagnostic 3004 for more details.
  1505.  
  1506.  
  1507. W, 3052, "character constant missing close quote in inactive code (')"
  1508.  
  1509.     Inactive  code  is  a  section  of  source  text  that   is   not 
  1510.     preprocessed   because   of   enclosing   conditional   inclusion 
  1511.     directives (such as #if ). An incomplete character  constant  was 
  1512.     identified   within   inactive  code.   Note  that  this  may  be 
  1513.     indicative of damage to a source file, although it may simply  be 
  1514.     so conditionally excluded code fragments.
  1515.  
  1516. W, 3053, "string literal in inactive code is missing close quote (")"
  1517.  
  1518.     Inactive   code   is  a  section  of  source  text  that  is  not 
  1519.     preprocessed   because   of   enclosing   conditional   inclusion 
  1520.     directives  (such  as  #if  ).  An  incomplete string literal was 
  1521.     identified  within  inactive  code.   Note  that  this   may   be 
  1522.     indicative  of damage to a source file, although it may simply be 
  1523.     so conditionally excluded code fragments.
  1524.  
  1525. W, 3054, "illegal character in inactive code in source stream"
  1526.  
  1527.     Inactive  code  is  a  section  of  source  text  that   is   not 
  1528.     preprocessed   because   of   enclosing   conditional   inclusion 
  1529.     directives (such as #if ).  Although the fact that  an  arbitrary 
  1530.     character forms a preprocessing token, and the fact that areas of 
  1531.     inactive code do not have to form valid tokens of any sort,  this 
  1532.     error  can  commonly  be  indicative  of  a corrupted source file 
  1533.     (although it may simply represent the present of  code  fragments 
  1534.     that were conditionally excluded).
  1535.  
  1536. W, 3055, "string literal in inactive code contains invalid escape sequence(s)"
  1537.  
  1538.     Inactive   code   is  a  section  of  source  text  that  is  not 
  1539.     preprocessed   because   of   enclosing   conditional   inclusion 
  1540.     directives  (such as #if ).  A cursory scan of the text within an 
  1541.     inactive code sequence revealed that a string  literal  contained 
  1542.     an  invalid  escape  sequence.   An escape sequence begins with a 
  1543.     backslash character, and has one of several specific forms.   See 
  1544.     diagnostic 3006 for more details.
  1545.  
  1546. E, 3056, "character constant has no characters"
  1547.  
  1548.     A  character  constant  is  either  badly  formed,  or  it has no 
  1549.     characters. If the user wants to create a constant with  a  value 
  1550.     equal  to  a single quote, then the correct syntax is '\''.  Note 
  1551.     that '' actually  has  no  meaning,  and  might  even  have  been 
  1552.     interpreted  as two consecutive tokens, each of which is a single 
  1553.     quote.
  1554.  
  1555. W, 3057, "character constant in inactive code has no characters"
  1556.  
  1557.     Inactive  code  is  a  section  of  source  text  that   is   not 
  1558.     preprocessed   because   of   enclosing   conditional   inclusion 
  1559.     directives (such as #if ). A character constant is  either  badly 
  1560.     formed,  or  it  has no characters. If the user wants to create a 
  1561.     constant with a value equal to a single quote, then  the  correct 
  1562.     syntax  is '\''.  Note that '' actually has no meaning, and might 
  1563.     even have been interpreted as two  consecutive  tokens,  each  of 
  1564.     which is a single quote.
  1565.  
  1566.  
  1567. E, 4001, "unrecognized or unmatched preprocessor directive"
  1568.  
  1569.     All  preprocessor  directive  begin  with  a  "#"  as  the  first 
  1570.     non-white character on the line.  If  the  non-white  token  that 
  1571.     follows this "#" is not any of the known preprocessing directives 
  1572.     (e.g.: if, ifdef,  ifndef,  elif,  else,  endif,  pragma,  error, 
  1573.     define,  undef,  include)  then  the directive is "unrecognized".  
  1574.     Note that this is significant even within section  of  code  that 
  1575.     are  "ifdef-ed  out",  in  that  the  preprocessor  is  trying to 
  1576.     maintain a proper nesting count for if directives. If a  bounding 
  1577.     preprocessor  directive  (e.g.: elif, else, endif) is encountered 
  1578.     but it is not syntactically possible to associate it with a prior 
  1579.     if,   the   the  directive  is  "unmatched".   For  example,  the 
  1580.     appearance of "#endif" without a prior "#if..."  directive  would 
  1581.     be an unmatched directive error.
  1582.  
  1583. E, 4002, "missing #endif for #if group"
  1584.  
  1585.     For   each   preprocessing   if   directive,   there  must  be  a 
  1586.     corresponding "#endif" directive to terminate the group of  lines 
  1587.     controlled  by  the  if/ifdef/ifndef.   The  end of file has been 
  1588.     reached, but the terminating endif has not been found.  Note that 
  1589.     it is not currently considered worthy of a diagnostic to identify 
  1590.     when an include file has ended without  terminating  an  if-group 
  1591.     that  was  begun within that file.  Most of the time, when a user 
  1592.     erroneously fails to terminate an if directive at any point,  the 
  1593.     directive  will go unterminated until the complete end of source, 
  1594.     at which point it will be identified by this diagnostic.
  1595.  
  1596. E, 4003, "missing expression for #if directive, FALSE assumed"
  1597.  
  1598.     A preprocessing "if" directive is supposed to consist  of  "#if", 
  1599.     followed by an expression (which must be first macro expanded and 
  1600.     then evaluated).  This error is produced if EITHER  there  wasn't 
  1601.     anything  (other than white space after the "if", or if the macro 
  1602.     expansion of the tokens following the "if" provided no tokens  to 
  1603.     evaluate.   For  example,  "#define  a" followed by "#if a" would 
  1604.     result in this error, as the macro "a"  expands  to  nothingness.  
  1605.     As  a  form  of  error  recovery, the preprocessor acts as if the 
  1606.     expression evaluated to false (i.e.: 0).
  1607.  
  1608. E, 4004, "missing identifier name in #ifdef directive, FALSE assumed"
  1609.  
  1610.     The syntax of the #ifdef" directive requires that  an  identifier 
  1611.     name follow the "ifdef" token.  This error is generated when only 
  1612.     whitespace follows the "ifdef" directive.  As  a  form  of  error 
  1613.     recovery, the preprocessor acts as if an identifier was presented 
  1614.     that was not defined, and hence the directive evaluates to FALSE.
  1615.  
  1616. E, 4005, "missing identifier name in #ifndef directive, TRUE assumed"
  1617.  
  1618.     The syntax of the #ifndef" directive requires that an  identifier 
  1619.     name  follow  the  "ifndef"  token.  This error is generated when 
  1620.     only whitespace follows the "ifndef" directive.   As  a  form  of 
  1621.     error  recovery,  the  preprocessor  acts as if an identifier was 
  1622.     presented that was not defined, and hence the directive evaluates 
  1623.     to TRUE.
  1624.  
  1625. E, 4006, "syntax error in #if directive, FALSE assumed"
  1626.  
  1627.     A  syntax  error  occurred  while parsing the latter section of a 
  1628.     "#if" directive.  Since the expression could not  be  read  as  a 
  1629.     whole,  simplistic error recovery has assumed that the expression 
  1630.     would have been false (e.g.: 0) anyway.  Note that a common cause 
  1631.     for  this  problem is the incorrect use of the "defined" operator 
  1632.     within a "#if" directive.  The only two syntactically valid forms 
  1633.     are  "defined identifier", and "defined ( identifier )", although 
  1634.     these forms may be used repeatedly alongside other expressions to 
  1635.     construct  the complete expression.  Also notice that this syntax 
  1636.     must be abided by prior to macro expansion, as the  scanning  for 
  1637.     and  evaluation  of  the  "defined" operator is done **PRIOR** to 
  1638.     macro evaluation.
  1639.  
  1640. E, 4007, "syntax error in #ifdef directive, FALSE assumed"
  1641.  
  1642.     A syntax error occurred while parsing the  latter  section  of  a 
  1643.     "#ifdef"   directive.    The   only   non-white   token  that  is 
  1644.     syntactically valid after the "ifdef" directive is an identifier.  
  1645.     If  a  non-identifier is placed at that point then a syntax error 
  1646.     is produced.  Error  recovery  in  this  case  asserts  that  was 
  1647.     provided  was not defined (it wasn't even an identifier), and the 
  1648.     directive evaluates to false.
  1649.  
  1650. E, 4008, "syntax error in #ifndef directive, TRUE assumed"
  1651.  
  1652.     A syntax error occurred while parsing the  latter  section  of  a 
  1653.     "#ifndef"   directive.    The   only   non-white  token  that  is 
  1654.     syntactically  valid  after  the   "ifndef"   directive   is   an 
  1655.     identifier.   If  a non-identifier is placed at that point then a 
  1656.     syntax error is produced.  Error recovery in  this  case  asserts 
  1657.     that was provided was not defined (it wasn't even an identifier), 
  1658.     and the directive evaluates to true.
  1659.  
  1660.  
  1661. E, 4009, "missing expression for #elif directive, FALSE assumed"
  1662.  
  1663.     A preprocessing  "elif"  directive  is  supposed  to  consist  of 
  1664.     "#elif",  followed  by  an  expression (which must be first macro 
  1665.     expanded and then evaluated).  This error is produced  if  EITHER 
  1666.     there  wasn't  anything (other than white space after the "elif", 
  1667.     or the  macro  expansion  of  the  tokens  following  the  "elif" 
  1668.     provided  no  tokens  to  evaluate.   For example, "#define a" in 
  1669.     active code, followed much later by "#elif a",  would  result  in 
  1670.     this  error,  as the macro "a" expands to nothingness.  As a form 
  1671.     of error recovery, the preprocessor acts  as  if  the  expression 
  1672.     evaluated to false (i.e.: 0).
  1673.  
  1674. E, 4010, "syntax error in #elif directive, FALSE assumed"
  1675.  
  1676.     A  syntax  error  occurred  while parsing the latter section of a 
  1677.     "#elif" directive.  Since the expression could not be read  as  a 
  1678.     whole,  simplistic error recovery has assumed that the expression 
  1679.     would have been false (e.g.: 0) anyway.  Note that a common cause 
  1680.     for  this  problem is the incorrect use of the "defined" operator 
  1681.     within a "#elif" directive.  The  only  two  syntactically  valid 
  1682.     forms  are  "defined  identifier",  and "defined ( identifier )", 
  1683.     although these forms  may  be  used  repeatedly  alongside  other 
  1684.     expressions  to  construct  the complete expression.  Also notice 
  1685.     that this syntax must be abided by prior to macro  expansion,  as 
  1686.     the scanning for and evaluation of the "defined" operator is done 
  1687.     **PRIOR** to macro evaluation.
  1688.  
  1689.  
  1690. E, 4011, "unexpected token(s) on line after #else"
  1691.  
  1692.     The "#else" directive is syntactically expected to be alone on  a 
  1693.     line  (not  counting  whitespace).   This error is generated when 
  1694.     tokens are found later on  the  line.   Note  that  there  is  no 
  1695.     significance to these tokens, as they are not processed or passed 
  1696.     along in any way.
  1697.  
  1698. W, 4012, "unexpected token(s) on line after #endif"
  1699.  
  1700.     The "#else" directive is syntactically expected to be alone on  a 
  1701.     line  (not  counting  whitespace).   This error is generated when 
  1702.     tokens are found later on  the  line.   Note  that  there  is  no 
  1703.     significance to these tokens, as they are not processed or passed 
  1704.     along in any way.
  1705.  
  1706. E, 4013, "missing file name in #include directive"
  1707.  
  1708.     The  preprocessing  "#include"  directive  expects  a  file  name 
  1709.     (either  enclosed  in quotes, or in angle brackets <...>.  Either 
  1710.     there is nothing after the  "include"  directive,  or  the  macro 
  1711.     expansion  of  the  tokens  that  followed  "include" expanded to 
  1712.     nothingness.  If tokens (other than whitespace)  are  present  on 
  1713.     the  line  after  "include", check to see that the desired tokens 
  1714.     and macro definitions are in place.
  1715.  
  1716. ?, 4014, ""
  1717.  
  1718.     There is no diagnostic 4014.
  1719.  
  1720. ?, 4015, ""
  1721.  
  1722.     There is no diagnostic 4015.
  1723.  
  1724.  
  1725. E, 4016, "unexpected token(s) following file name in #include directive"
  1726.  
  1727.     After macro expanding the token sequence that follows  "#include" 
  1728.     in  an  "include" directive, the syntax requires that ONLY a file 
  1729.     name be present.  This error indicates that additional tokens are 
  1730.     present  on  the  line after the file name, and the error message 
  1731.     should show the text of the first such token.
  1732.  
  1733. E, 4017, "missing line number and file in #line directive"
  1734.  
  1735.     This  error  message  is  produced  when  nothing   (other   than 
  1736.     whitespace)  appears  after  "line"  in a "#line" directive.  The 
  1737.     syntax requires that the first token be an integer between 1  and 
  1738.     32767, and that an option second argument specify a file name.
  1739.  
  1740. E, 4018, "first token in #line directive is not a line number"
  1741.  
  1742.     A  preprocessor  "#line" directive was encountered, but the first 
  1743.     argument supplied was not  an  integer  constant  (note:  decimal 
  1744.     points and sign are NOT allowed in an integer constant).
  1745.  
  1746. E, 4019, "second token in #line directive is not a string literal (file name)"
  1747.  
  1748.     The  second  argument  to  a  "#line"  directive must be a string 
  1749.     literal (delimited by double quotes `"').  This  error  indicates 
  1750.     that the second argument is not of the form "file_name".
  1751.  
  1752. E, 4020, "unexpected 3rd token in #line directive"
  1753.  
  1754.     The  "#line" directive expects no more than 2 arguments, the line 
  1755.     number to associate with the next line, and the file  name.  This 
  1756.     error  indicates  that at least one (useless) additional token is 
  1757.     present after the required arguments.
  1758.  
  1759. E, 4021, "#error encountered; no message provided"
  1760.  
  1761.     The source text included a "#error" directive.  The line did  not 
  1762.     have  any addition text to present.  Note that a comment is white 
  1763.     space,  and  hence  cannot  appear  in  an  "#error"  diagnostic.  
  1764.     Arbitrary  text  may  be  placed  on  the  line with the "#error" 
  1765.     directive, and it will have no impact on  the  source  code,  but 
  1766.     will display with this diagnostic.
  1767.  
  1768. W, 4022, "#pragma missing specification tokens"
  1769.  
  1770.     The  "#pragma"  directive  is  supposed to include some text with 
  1771.     implementation defined meaning.   This  error  indicates  that  a 
  1772.     pragma  was  encountered,  but  there  were no tokens (other than 
  1773.     whitespace, or equivalently comments) on the  latter  section  of 
  1774.     the line.
  1775.  
  1776. E, 4023, "parameter list in macro definition not complete"
  1777.  
  1778.     An  attempt  was  (apparently)  made  to define a "function like" 
  1779.     macro, but the parameter list was never completed.   A  "function 
  1780.     like"  macro  is  defined using a "#define" directive, and by not 
  1781.     leaving a space between the macro name, and  a  parenthesis  that 
  1782.     follows  it.  This  error  either  indicates  that  the  list  of 
  1783.     parameters for the macro was never terminated by a ")", or that a 
  1784.     syntax  error  in  the  parameter  list  stopped the scan for the 
  1785.     closing parenthesis.  Check to be sure that there  is  a  closing 
  1786.     ')',  and  that  all  the  parameters are identifiers (you cannot 
  1787.     leave any out), and that the parameters (if more  than  one)  are 
  1788.     separated  by  commas.   Typically a syntax error diagnostic will 
  1789.     accompany this message and reveal where the scan was terminated.
  1790.  
  1791. E, 4024, "missing identifier name in #define"
  1792.  
  1793.     A "#define"  directive  was  encountered  that  had  nothing  but 
  1794.     whitespace  after  the "define" keyword.  The "#define" directive 
  1795.     requires, at a minimum, the name of an identifier to be defined.
  1796.  
  1797. E, 4025, "invalid #define directive"
  1798.  
  1799.     A  syntax  error  was  encountered  while  scanning  a  "#define" 
  1800.     directive,  and  hence this directive will be ignored.  The first 
  1801.     argument to a "#define" directive must be an identifier.  Failure 
  1802.     to  provide  an  identifier, and to instead provide another token 
  1803.     (such as a number or an arithmetic operator) is the  most  common 
  1804.     cause of this diagnostic.
  1805.  
  1806. E, 4026, "unexpected token(s) following identifier in #undef"
  1807.  
  1808.     Exactly  on  argument  is expected for a "#undef" directive.  The 
  1809.     argument must be the name of the macro  being  removed  from  the 
  1810.     macro  database.  This error indicates that some non-white tokens 
  1811.     (identified in an  associated  syntax  diagnostic)  were  present 
  1812.     after the identifier name.  Note that these tokens were ignored.
  1813.  
  1814. E, 4027, "non-identifier in #undef directive"
  1815.  
  1816.     The  token  that  follows  "#undef" in such a directive must be a 
  1817.     valid identifier name.  This message (and  an  associated  syntax 
  1818.     diagnostic) indicates that a non-identifier (such as a number, or 
  1819.     arithmetic operator) was  found  when  the  identifier  name  was 
  1820.     expected.
  1821.  
  1822. E, 4028, "missing identifier name in #undef"
  1823.  
  1824.     This  diagnostic  indicates that the "#undef" directive was found 
  1825.     alone on a line.  The "#undef" directive requires  one  argument, 
  1826.     specifying  an  identifier,  that is to be removed from the macro 
  1827.     database.
  1828.  
  1829. E, 4029, "syntax error in preprocessor scan"
  1830.  
  1831.     The indicated token "confused" the parser, as  the  token  cannot 
  1832.     reasonably occur where it was found.  An additional error message 
  1833.     should accompany this message and indicate the context  in  which 
  1834.     the preprocessor was confused (surprised).
  1835.  
  1836. E,  4030,  "syntax  error  in  expanded  #if/#elif  expression, FALSE 
  1837. assumed"
  1838.  
  1839.     This  diagnostic indicates that a sequence of tokens was gathered 
  1840.     for a "#if"  or  "#elif",  but  after  these  tokens  were  macro 
  1841.     expanded,  the  resulting  sequence  was  not  a  valid  constant 
  1842.     expression.  Note that the exact procedure is to: 1)  gather  the 
  1843.     tokens; 2) replace the "defined" operator with the results of its 
  1844.     test (0L or 1L); 3) macro expand the  resulting  token  sequence; 
  1845.     and  4) attempt to evaluate the resulting tokens as having formed 
  1846.     a constant expression.   This  message  indicates  an  error  was 
  1847.     encountered in step 4 of this operation.
  1848.  
  1849. E, 4031, "syntax error at end of expanded #if/#elif expression, FALSE 
  1850. assumed"
  1851.  
  1852.     This  diagnostic indicates that a sequence of tokens was gathered 
  1853.     for a "#if"  or  "#elif",  but  after  these  tokens  were  macro 
  1854.     expanded,  the  resulting  sequence  was  not  a  valid  constant 
  1855.     expression.  Specifically, there were insufficiently many  tokens 
  1856.     (e.g.:  there is a missing ')'; or the last token on the line was 
  1857.     a binary operator, and there is a missing right  operand).   Note 
  1858.     that  the exact procedure is to: 1) gather the tokens; 2) replace 
  1859.     the "defined" operator with the results of its test (0L  or  1L); 
  1860.     3)  macro  expand the resulting token sequence; and 4) attempt to 
  1861.     evaluate  the  resulting  tokens  as  having  formed  a  constant 
  1862.     expression.   This  message indicates an error was encountered in 
  1863.     step 4 of this operation.
  1864.  
  1865. E, 4032, "cannot #define keyword 'defined'"
  1866.  
  1867.     The preprocessing keyword "defined" has special  significance  in 
  1868.     the  evaluation  of  "#if"  and "#elif" directives.  As a result, 
  1869.     ANSI C precludes macro defining this identifier.   This  specific 
  1870.     diagnostic occurred during an attempt to define "defined" to be a 
  1871.     manifest macro.
  1872.  
  1873. E, 4033, "cannot #define internal macro name"
  1874.  
  1875.     There are several internally defined macros that ANSI C precludes 
  1876.     from  redefinition.  These names are "__STDC__" (or "__cplusplus" 
  1877.     when  in  c++  mode;  see  sections  on   #pragma),   "__FILE__", 
  1878.     "__LINE__", "__DATE__", "__TIME__".  This specific diagnostic was 
  1879.     generated when an attempt was  made  to  redefine  one  of  these 
  1880.     macros to be an ordinary manifest macro.
  1881.  
  1882. E, 4034, "non-benign macro redefinition ignored"
  1883.  
  1884.     Once  a  macro  has  been  defined  via a "#define" directive, it 
  1885.     cannot (without  being  "#undef"-ed  again)  be  the  subject  of 
  1886.     another  macro  definition,  unless the "redefinition" is "almost 
  1887.     identical" to the original definition.  The "almost" reflects the 
  1888.     fact   that  the  nature  of  the  whitespace  contained  in  the 
  1889.     definition may be altered slightly, but the nonwhite tokens,  and 
  1890.     the  presence  of separating whitespace, must be unchanged.  This 
  1891.     ANSI C specification appears to be targeted at allowing  multiple 
  1892.     header  files, with effectively the same macro definitions, to be 
  1893.     included without conflicts. Note that it is  NOT  permissible  to 
  1894.     define  a  macro  to  be  both  a  manifest macro (doesn't have a 
  1895.     parenthesized list of parameters) AND a function  like  macro  at 
  1896.     the  same  time.   This specific diagnostic was generated when an 
  1897.     attempt was made  to  redefine  a  macro  as  a  manifest  macro, 
  1898.     independent   of   its   former  definition  (which  was  notably 
  1899.     different).
  1900.  
  1901. E, 4035, "cannot #define keyword 'defined'"
  1902.  
  1903.     The preprocessing keyword "defined" has special  significance  in 
  1904.     the  evaluation  of  "#if"  and "#elif" directives.  As a result, 
  1905.     ANSI C precludes macro defining this identifier.   This  specific 
  1906.     diagnostic occurred during an attempt to define "defined" to be a 
  1907.     function like or parameterized macro.
  1908.  
  1909. E, 4036, "cannot #define internal macro name"
  1910.  
  1911.     There are several internally defined macros that ANSI C precludes 
  1912.     from  redefinition.  These names are "__STDC__" (or "__cplusplus" 
  1913.     when  in  c++  mode;  see  sections  on  #pragma)  ,  "__FILE__", 
  1914.     "__LINE__", "__DATE__", "__TIME__".  This specific diagnostic was 
  1915.     generated when an attempt was  made  to  redefine  one  of  these 
  1916.     macros to be a function like, or parameterized macro.
  1917.  
  1918. E, 4037, "non-benign macro redefinition ignored"
  1919.  
  1920.     Once  a  macro  has  been  defined  via a "#define" directive, it 
  1921.     cannot (without  being  "#undef"-ed  again)  be  the  subject  of 
  1922.     another  macro  definition,  unless the "redefinition" is "almost 
  1923.     identical" to the original definition.  The "almost" reflects the 
  1924.     fact   that  the  nature  of  the  whitespace  contained  in  the 
  1925.     definition may be altered slightly, but the nonwhite tokens,  and 
  1926.     the  presence  of separating whitespace, must be unchanged.  This 
  1927.     ANSI C specification appears to be targeted at allowing  multiple 
  1928.     header  files, with effectively the same macro definitions, to be 
  1929.     included without conflicts. Note that it is  NOT  permissible  to 
  1930.     define  a  macro  to  be  both  a  manifest macro (doesn't have a 
  1931.     parenthesized list of parameters) AND a function  like  macro  at 
  1932.     the  same  time.   This specific diagnostic was generated when an 
  1933.     attempt was  made  to  redefine  a  macro  function  like  macro, 
  1934.     independent   of   its   former  definition  (which  was  notably 
  1935.     different).
  1936.  
  1937. E, 4038, "cannot #undef keyword 'defined'"
  1938.  
  1939.     The preprocessing keyword "defined" has special  significance  in 
  1940.     the  evaluation  of  "#if"  and "#elif" directives.  As a result, 
  1941.     ANSI C precludes macro defining this identifier,  also  precludes 
  1942.     providing "defined" as the subject of a "#undef" directive (which 
  1943.     caused this diagnostic).
  1944.  
  1945. E, 4039, "attempted #undef of internal macro ignored"
  1946.  
  1947.     There are several internally defined macros that ANSI C precludes 
  1948.     from  redefinition  and  "undefining". These names are "__STDC__" 
  1949.     (or "__cplusplus" when in c++ mode;  see  sections  on  #pragma), 
  1950.     "__FILE__",  "__LINE__",  "__DATE__",  "__TIME__".  This specific 
  1951.     diagnostic was generated when an attempt was made to undefine one 
  1952.     of these macros.
  1953.  
  1954. E, 4040, "function like macro missing ')' after arguments"
  1955.  
  1956.     Some  source  text  (or  expanded  source  text)  that  was being 
  1957.     expanded included an identifier that was defined  as  a  function 
  1958.     like macro, which had the potential to be expanded.  In addition, 
  1959.     this identifier was followed by a '(',  which  confirmed  that  a 
  1960.     expansion    of   the   function   like   macro   was   required.  
  1961.     Unfortunately, the ')' that marks the end of  the  argument  list 
  1962.     was not provide (note that parenthesis nest as the search for the 
  1963.     closing parenthesis is made).  Note that the search for a closing 
  1964.     ')'  will  NOT  proceed  beyond the next preprocessing directive.  
  1965.     Hence this diagnostic may be caused by a directive in the  middle 
  1966.     of   an   argument   list.   See  #pragma  delayed_expansion,  or 
  1967.     BUGS/FEATURES for details of this scanning limitation.
  1968.  
  1969. E, 4041, "macro has whitespace argument"
  1970.  
  1971.     One of the arguments to a function like macro invocation (i.e.: a 
  1972.     point  at  which macro expansion is called for) is missing, or at 
  1973.     most  there  is  white  space.   For  example:  after  the  macro 
  1974.     definition  "#define  f(a,b,c)",  the presence of "f(, /*comments 
  1975.     are  whitespace*/,  )",  would  cause  3   renditions   of   this 
  1976.     diagnostic.   Note  that  in  the  example  the first argument is 
  1977.     missing, the second is formed by multiple  whitespaces,  and  the 
  1978.     third  is formed by a space.  It should also be realized that the 
  1979.     arguments are identified  BEFORE  they  are  macro  expanded  (if 
  1980.     needed).   Hence  the  fact  that an argument, AFTER isolation as 
  1981.     such, expands to nothingness is not generally a  source  of  this 
  1982.     diagnostic.
  1983.  
  1984. E, 4042, "extra arguments to macro ignored"
  1985.  
  1986.     A  macro  invocation  of a function like macro has more arguments 
  1987.     than are prescribed by  its  macro  definition.   The  additional 
  1988.     arguments are ignored.
  1989.  
  1990. E, 4043, "macro has solo whitespace argument"
  1991.  
  1992.     The  indicated function like macro was defined to accept a single 
  1993.     argument, but the invocation of that macro had only whitespace as 
  1994.     an  argument.   Since arguments are defined by ANSI C to be other 
  1995.     than whitespace, this is  unacceptable.   As  an  error  recovery 
  1996.     mechanism,  a  whitespace sequence has been provided as though it 
  1997.     were the argument.
  1998.  
  1999. E,  4044,  "not  enough  arguments  for  macro,  whitespace arguments 
  2000. supplied"
  2001.  
  2002.     The indicated function like macro  was  defined  to  accept  more 
  2003.     arguments  than  were provided in the indicated invocation.  As a 
  2004.     form of error recovery, whitespace has been provided  (as  though 
  2005.     it  were  a  valid  argument)  for  all the undefined (rightmost) 
  2006.     parameters.
  2007.  
  2008. E, 4045, "operator '##' ignored at start of replacement list"
  2009.  
  2010.     A macro  definition  had  only  parameters  to  the  left  of  an 
  2011.     indicated  paste  ("##") operator.  When the macro invocation was 
  2012.     requested, some additional error recovery caused whitespace to be 
  2013.     provided  as  arguments  (see  accompanying  diagnostics).   As a 
  2014.     result of this situation, there was nothing to paste to the  left 
  2015.     of  the trailing tokens.  The error recovery in this situation is 
  2016.     too ignore the paste operator.  For example: "#define F(a)  a  ## 
  2017.     hello",  followed  by  "F()" will produce this diagnostic.  Since 
  2018.     the arguments that are being placed adjacent to a paste  operator 
  2019.     are  NOT  expanded prior to placement, the associated diagnostic, 
  2020.     involving the use of  white  space  as  an  argument,  is  always 
  2021.     present  when  this  diagnostic  is produced.  Note that not only 
  2022.     does the  "##"  operator  not  have  any  function,  it  is  also 
  2023.     prevented  from  activating  paste functionality as it is used is 
  2024.     the original context (perhaps as an argument).
  2025.  
  2026. E, 4046, "operator '##' ignored at end of replacement list"
  2027.  
  2028.     A macro definition  had  only  parameters  to  the  right  of  an 
  2029.     indicated  paste  ("##") operator.  When the macro invocation was 
  2030.     requested, some additional error recovery caused whitespace to be 
  2031.     provided  as  arguments  (see  accompanying  diagnostics).   As a 
  2032.     result of this situation, there was nothing to paste to the right 
  2033.     of  the  leading tokens.  The error recovery in this situation is 
  2034.     too ignore the paste operator. For example: "#define  F(a)  hello 
  2035.     ## a", followed by "F()" will produce this diagnostic.  Since the 
  2036.     arguments that are being placed adjacent to a paste operator  are 
  2037.     NOT  expanded  prior  to  placement,  the  associated diagnostic, 
  2038.     involving the use of  white  space  as  an  argument,  is  always 
  2039.     present  when  this  diagnostic  is produced.  Note that not only 
  2040.     does the  "##"  operator  not  have  any  function,  it  is  also 
  2041.     prevented  from  activating  paste functionality as it is used is 
  2042.     the original context (perhaps as an argument).
  2043.  
  2044. E, 4047, "'##' operator followed by '##' operator in macro replacement list"
  2045.  
  2046.     This diagnostic is generated only if the macro is  expanded.   It 
  2047.     may  be  generated  because  the  a  definition  placed two paste 
  2048.     operators ("##") consecutively (such as "#define m  hello  ##  ## 
  2049.     there"),  or as a consequence of a "missing argument" diagnostic.  
  2050.     An example of the latter case is  "define  F(a)  hello  ##  a  ## 
  2051.     there",  followed  by "F()".  This diagnostic should be corrected 
  2052.     by  either  adjusting  the  erroneous  macro  definition   (first 
  2053.     example),  or  by preventing the associated "whitespace argument" 
  2054.     error from inducing this problem.  The error recovery  result  of 
  2055.     this construct is that the token to the left of the first "##" is 
  2056.     pasted onto the "##" to the right.   This  will  typically  cause 
  2057.     additional  errors  as the resulting token is scanned (and cannot 
  2058.     be classified).
  2059.  
  2060. E, 4048, "'#' operator applied to whitespace"
  2061.  
  2062.     At macro definition time, it was verified that  the  argument  of 
  2063.     the  stringize  operator  ("#")  was a parameter.  Unfortunately, 
  2064.     this diagnostic indicates  that  at  macro  invocation  time  the 
  2065.     corresponding parameter was missing, and whitespace (as indicated 
  2066.     by accompanying diagnostics) was provided as  an  argument.   The 
  2067.     error recovery in this situation provided for the construction of 
  2068.     the string literal with no contents  at  all  (i.e.:  "").   This 
  2069.     result  is  generally not well defined, as the ANSI C description 
  2070.     calls for the removal of  all  leading  and  trailing  whitespace 
  2071.     before  creating  the string, while at the same time it indicates 
  2072.     that internal whitespace should be reduced to a single space.
  2073.  
  2074. E, 4049, "operator '##' illegal at start of replacement list"
  2075.  
  2076.     This diagnostic indicates that a macro  definition  has  a  paste 
  2077.     operator  ("##")  at the start of the replacement list. Since the 
  2078.     paste operator requires a  left  operand  (and  pasting  is  done 
  2079.     BEFORE plugging the complete macro expansion into its surrounding 
  2080.     context), the paste operator is guaranteed to  not  have  a  left 
  2081.     argument,  and  hence  will  not  perform  any action.  The error 
  2082.     recovery in this context is to simply leave the paste operator at 
  2083.     the  start  of  the replacement list.  Note that it is internally 
  2084.     prevented from inducing a paste operation in other contexts (such 
  2085.     as when provided as an argument to another macro).
  2086.  
  2087. E, 4050, "operator '#' illegal at end of replacement list"
  2088.  
  2089.     The  replacement  list  for  a macro ends in a stringize operator 
  2090.     ("#"). Since the operator requires a right operand, there  is  no 
  2091.     possibility  that  a  macro  invocation  would provide such.  The 
  2092.     error recovery in this situation  involves  effectively  deleting 
  2093.     the trailing "#" from the macro definition.
  2094.  
  2095. E, 4051, "operator '#' not followed by a macro parameter"
  2096.  
  2097.     The  right  operand  of  the  stringize operator ("#") in a macro 
  2098.     definition is not a parameter.  The meaningless "#" is discarded. 
  2099.     Normally the token just to the right of "#" in a replacement list 
  2100.     is a parameter  for  the  macro,  and  the  intent  is  that  the 
  2101.     corresponding  argument  be  stringized  (enclosed  gracefully in 
  2102.     quotes) at macro invocation time.
  2103.  
  2104. E, 4052, "operator '##' illegal at end of replacement list"
  2105.  
  2106.     This diagnostic indicates that a macro  definition  has  a  paste 
  2107.     operator  ("##")  at  the  end of the replacement list. Since the 
  2108.     paste operator requires a right  operand  (and  pasting  is  done 
  2109.     BEFORE plugging the complete macro expansion into its surrounding 
  2110.     context), the paste operator is guaranteed to not  have  a  right 
  2111.     argument,  and  hence  will  not  perform  any action.  The error 
  2112.     recovery in this context is to simply leave the paste operator at 
  2113.     the  end  of  the  replacement  list.  Note that it is internally 
  2114.     prevented from inducing a paste operation in other contexts (such 
  2115.     as when provided as an argument to another macro).
  2116.  
  2117. E, 4053, "line number in #line directive must be between 1 and 32767"
  2118.  
  2119.     For  compatibility  with  a  variety  of  implementations, ANSI C 
  2120.     requires that the first argument (the line number) in  a  "#line" 
  2121.     directive  be  in  the  range  of  1-32767.   This implementation 
  2122.     actually supports any line numbers less than 2<<31 (2 to the 31st 
  2123.     power).  Note  that  negative  line numbers cannot be entered, as 
  2124.     they are actually evaluated as an expression, including a leading 
  2125.     unary  minus  operator,  and hence would cause syntax errors in a 
  2126.     "#line" directive.
  2127.  
  2128.  
  2129. W, 4054, "expected integer or diagnostic level"
  2130.  
  2131.     The #pragma diagnostic_adjust  was  selected,  but  the  required 
  2132.     arguments  were  not  supplied.   JRCPP assumes that the macro is 
  2133.     only accidentally named identically to JRCPP's pragma, and so the 
  2134.     pragma is passed unchanged to the post-preprocessed output file.
  2135.  
  2136. W, 4055, "expected 'silent', 'hint', 'warning', or 'error'"
  2137.  
  2138.     A #pragma diagnostic_adjust directive was provided, but the first 
  2139.     argument was an identifier other than the a valid severity level. 
  2140.     The two arguments to diagnostic_adjust are a severity level (or a 
  2141.     specific  diagnostic  number),  followed  by  a  users  specified 
  2142.     severity   level.    This  pragma  is  processed  as  though  the 
  2143.     similarity to a valid JRCPP  pragma  was  coincidental,  and  the 
  2144.     directive  is  passed  unchanged to the post-preprocessing output 
  2145.     file.
  2146.  
  2147. W, 4056, "diagnostic numbers are between 1001 and 9999"
  2148.  
  2149.     A #pragma diagnostic_adjust directive was provided, but the first 
  2150.     argument  was  an  integer outside the valid range for diagnostic 
  2151.     numbers.  The two arguments to diagnostic_adjust are  a  severity 
  2152.     level  (or  a  specific  diagnostic  number), followed by a users 
  2153.     specified severity level.  This pragma is processed as though the 
  2154.     similarity  to  a  valid  JRCPP  pragma was coincidental, and the 
  2155.     directive is passed unchanged to  the  post-preprocessing  output 
  2156.     file.
  2157.  
  2158. W, 4057, "expected diagnostic number, or severity level"
  2159.  
  2160.     A #pragma diagnostic_adjust directive was provided, but the first 
  2161.     argument was neither an  integer  nor  and  identifier.  The  two 
  2162.     arguments  to  diagnostic_adjust  are  a  severity  level  (or  a 
  2163.     specific  diagnostic  number),  followed  by  a  users  specified 
  2164.     severity   level.    This  pragma  is  processed  as  though  the 
  2165.     similarity to a valid JRCPP  pragma  was  coincidental,  and  the 
  2166.     directive  is  passed  unchanged to the post-preprocessing output 
  2167.     file.
  2168.  
  2169.  
  2170. W, 4058, "expected 'fatal', 'error', 'warning' 'hint' or 'silent'"
  2171.  
  2172.     A #pragma  diagnostic_adjust  directive  was  provided,  but  the 
  2173.     second  argument  was  not  a  valid  severity  level.   The  two 
  2174.     arguments  to  diagnostic_adjust  are  a  severity  level  (or  a 
  2175.     specific  diagnostic  number),  followed  by  a  users  specified 
  2176.     severity level. This pragma is processed as though the similarity 
  2177.     to  a  valid  JRCPP pragma was coincidental, and the directive is 
  2178.     passed unchanged to the post-preprocessing output file.
  2179.  
  2180. W, 4059, "expected ancestral selection and/or 'current_directory'"
  2181.  
  2182.     A  #pragma  include_search  directive  was  provided,   but   the 
  2183.     arguments  were  not  valid  for this pragma.  There should be at 
  2184.     most two arguments, one of which specifies the extent (if any) of 
  2185.     the    use   of   ancestral   files   and   their   path   prefix 
  2186.     (only_eldest_ancestor,     OR      only_youngest_ancestor      OR 
  2187.     all_ancestors),  and one argument that specifies the use (if any) 
  2188.     of the current directory as a  path  prefix  (current_directory).  
  2189.     This  pragma  is  processed  as  though the similarity to a valid 
  2190.     JRCPP pragma  was  coincidental,  and  the  directive  is  passed 
  2191.     unchanged to the post-preprocessing output file.
  2192.  
  2193. E, 4060, "unrecognized pragma undefine_macros selector"
  2194.  
  2195.     The  "#pragma undefine_macros ..." directive was encountered, but 
  2196.     one of the arguments was not a valid macro group selector.  Since 
  2197.     a  prior  selector was valid, the scan of this directive will NOT 
  2198.     be  abandoned.  The  valid   groups   include   "ANSI",   "STDC", 
  2199.     "platform",  "command_line",  and "user".  Note that the "#pragma 
  2200.     after_output_dump macros" can be use to  obtain  a  list  of  the 
  2201.     contents of each of these macro groups. This specific argument is 
  2202.     being ignored, and the scan of  the  otherwise  valid  pragma  is 
  2203.     continuing.  Note that this error simply marks the exclusion of a 
  2204.     single argument, and if later arguments are  present  and  valid, 
  2205.     then they will be accepted and processed.
  2206.  
  2207. W, 4061, "expected expected 'ANSI',  'platform',  'command_line',  or 
  2208. 'user'"
  2209.  
  2210.     The  "#pragma undefine_macros ..." directive was encountered, but 
  2211.     none of the arguments was not a valid macro group selector.   The 
  2212.     valid  groups include "ANSI", "STDC", "platform", "command_line", 
  2213.     and "user". Note  that  the  "#pragma  after_output_dump  macros" 
  2214.     lists  the  contents  of  each  of  these  macro groups. Since no 
  2215.     meaning could be ascribed to this #pragma,  the  pragma  will  be 
  2216.     passed unchanged to the output file.
  2217.  
  2218. E, 4062, "unrecognized pragma after_output_dump selector"
  2219.  
  2220.     A  "#pragma after_output_dump ..." directive was encountered, but 
  2221.     the indicated argument was neither 'profile' nor  'macros'.  This 
  2222.     specific   argument  is  being  ignored,  and  the  scan  of  the 
  2223.     potentially valid pragma is  continuing.  Note  that  this  error 
  2224.     simply  marks  the  exclusion  of a single argument, and if other 
  2225.     arguments are present and correct, then they will be acted upon.
  2226.  
  2227. W, 4063, "expected 'profile' or 'macros'"
  2228.  
  2229.     A #"pragma after_output_dump" directive was encountered, but none 
  2230.     of  the  arguments  were valid selectors ('profile' or 'macros'). 
  2231.     Since no meaning could be ascribed to this  #pragma,  the  pragma 
  2232.     will be passed unchanged to the output file.
  2233.  
  2234. W, 4064, "expected 'off', or 'on' (the default is 'on')"
  2235.  
  2236.     A  "#pragma delayed_expansion" directive was encountered, but the 
  2237.     argument was other than 'on', 'off',  or  nothing.  Setting  this 
  2238.     option  to 'on' allows directives that cannot change the state of 
  2239.     the macro database to occur during an argument list for  a  macro 
  2240.     invocation.  Since  no meaning could be ascribed to this #pragma, 
  2241.     the pragma will be passed unchanged to the output file.
  2242.  
  2243. W, 4065, "expected 'off', or 'on' (the default is 'on')"
  2244.  
  2245.     A "#pragma cplusplus_comment" directive was encountered, but  the 
  2246.     argument  was  other  than  'on', 'off', or nothing. Setting this 
  2247.     option to 'on' causes the lexical scan of source text to  support 
  2248.     the  //  style  comments.   Since no meaning could be ascribed to 
  2249.     this #pragma, the pragma will be passed unchanged to  the  output 
  2250.     file.
  2251.  
  2252. W, 4066, "expected 'off', or 'on' (the default is 'on')"
  2253.  
  2254.     A  "#pragma describe_macro_expansions" directive was encountered, 
  2255.     but the argument was other than 'on', 'off', or nothing.  Setting 
  2256.     this  option  to  'on' directs JRCPP to provide an explanation of 
  2257.     the macro expansion process as  the  next  group  of  tokens  are 
  2258.     expanded.  Note  that groups of tokens that are expanded together 
  2259.     are typically bounded by  directives.   Hence  a  pair  of  these 
  2260.     pragmas  can be used to turn this option on for only a few lines, 
  2261.     and then turn it back off.  Since no meaning could be ascribed to 
  2262.     this  #pragma,  the pragma will be passed unchanged to the output 
  2263.     file.
  2264.  
  2265. W, 4067, "expected 'off', or 'on' (the default is 'on')"
  2266.  
  2267.     A "#pragma space_between_tokens" directive was  encountered,  but 
  2268.     the argument was other than 'on', 'off', or nothing. Setting this 
  2269.     option to 'off'  directs  JRCPP  to  avoid  adding  extra  spaces 
  2270.     between  consecutive tokens as the output file is generated. Note 
  2271.     that the actual output file is generated after the entire  source 
  2272.     text  has  been preprocessed, and hence it is generally of little 
  2273.     value to alternately turn this feature off and then on. Since  no 
  2274.     meaning  could  be  ascribed  to this #pragma, the pragma will be 
  2275.     passed unchanged to the output file.
  2276.  
  2277. W, 4068, "expected 'off', or 'on' (the default is 'on')"
  2278.  
  2279.     A "#pragma display_progress" directive was encountered,  but  the 
  2280.     argument  was  other  than  'on', 'off', or nothing. Setting this 
  2281.     option to 'on' causes a series of status messages  to  appear  on 
  2282.     stderr,  so  that  progress  of  JRCPP can be monitored. Since no 
  2283.     meaning could be ascribed to this #pragma,  the  pragma  will  be 
  2284.     passed unchanged to the output file.
  2285.  
  2286. W, 4069, "unexpected token(s) at end of pragma line ignored"
  2287.  
  2288.     JRCPP  was  able  to  interpret  and act based upon the indicated 
  2289.     pragma. However, there were additional tokens on the end  of  the 
  2290.     line that are being ignored.
  2291.  
  2292. S, 4070, "benign redefinition of manifest macro ignored"
  2293.  
  2294.     A define directive redefined an existing manifest macro.  The new 
  2295.     definition is similar enough to the previous definition that  the 
  2296.     action  is  considered  benign  (i.e., has no impact).  Note that 
  2297.     this diagnostic is silent, but users may chose to raise its level 
  2298.     in order to quickly identify header files that are being included 
  2299.     repeatedly (and wastefully providing the same macro definitions).  
  2300.     Although  the  redefinition  is  benign, it may also be a symptom 
  2301.     that several distinct files have the same definitions (which  may 
  2302.     identify a problem before it becomes significant).
  2303.  
  2304. S, 4071, "benign redefinition of function-like macro ignored"
  2305.  
  2306.     A  define  directive  redefined  an existing function like macro.  
  2307.     The new definition is similar enough to the  previous  definition 
  2308.     that the action is considered benign (i.e., has no impact).  Note 
  2309.     that this diagnostic is silent, but users may chose to raise  its 
  2310.     level  in  order  to quickly identify header files that are being 
  2311.     included repeatedly (and  wastefully  providing  the  same  macro 
  2312.     definitions).   Although  the redefinition is benign, it may also 
  2313.     be  a  symptom  that  several  distinct  files  have   the   same 
  2314.     definitions  (which  may  identify  a  problem  before it becomes 
  2315.     significant).
  2316.  
  2317. S, 4072, "macro #undef action undertaken"
  2318.  
  2319.     A #undef directive was encountered, and the indicated  macro  was 
  2320.     defined.   The  macro  is  now  being  undefined.  Note that this 
  2321.     diagnostic is silent, but may prove useful if there is a question 
  2322.     of where a given macro was undefined.
  2323.  
  2324. W, 4073, "consecutive paste operators in macro definition"
  2325.  
  2326.     A  macro  definition  was provided that had two consecutive paste 
  2327.     operators  ("##").   If  this  macro  is  ever  expanded   (i.e., 
  2328.     invoked), then a more severe diagnostic will be produced.
  2329.  
  2330. E, 4074, "line number must be a digit sequences only"
  2331.  
  2332.     A #line directive was encountered, but the line number was not of 
  2333.     the expected  format.   Specifically,  an  integer  constant  was 
  2334.     provided  with  a suffix of either 'u', 'l', 'U', or 'L', or some 
  2335.     combination (as is valid for an integer constant).   The  postfix 
  2336.     is ignored.
  2337.  
  2338. W, 4075, "keyword 'defined' evaluated as 0 in if/elif directive"
  2339.  
  2340.     Macro expansion of the token sequence in a #if or #elif directive 
  2341.     created the identifier 'defined'.  Since  the  keyword  'defined' 
  2342.     only  has  special meaning before the macro expansion process, it 
  2343.     is treated like any other  identifier,  and  replaced  with  '0'.  
  2344.     Since  this  is  an  area  were  the  results  are implementation 
  2345.     defined, this construct might not be portable.  It  is  suggested 
  2346.     that  you  avoid  the use of the identifier 'defined' in a #if or 
  2347.     #elif directive, and use ONLY the  operator  'defined'  prior  to 
  2348.     macro expansion.
  2349.  
  2350. E, 4076, "scanner limitation: too many characters in pasted string"
  2351.  
  2352.     The result of a paste operator ("##") in a macro replacement list 
  2353.     has created a token with a long spelling.  This token is so large 
  2354.     that  it  exceeds  the  buffer  size of the lexical analyser that 
  2355.     "reclassifies"  such  tokens.    This   reclassification   should 
  2356.     actually  have  no significance unless the token is used in a #if 
  2357.     or #elif directive.  Fundamentally this diagnostic indicates that 
  2358.     a static limit in JRCPP has been exceeded.
  2359.  
  2360. S, 4077, "macro #undef requested for undefined identifier"
  2361.  
  2362.     A  #undef directive was encountered, but the named identifier was 
  2363.     not currently defined.  Hence this directive had no effect.  Note 
  2364.     that   this  diagnostic  is  silent,  but  may  prove  useful  in 
  2365.     diagnosing  incorrectly  typed  identifier  names  in  an   undef 
  2366.     directive.
  2367.  
  2368. H, 4078, "use of bulk undefine may limit portability"
  2369.  
  2370.     The  directive  "#pragma  undefine_macros platform" has requested 
  2371.     that several macros be undefined (specifically,  all  the  macros 
  2372.     that  are  provided  by  JRCPP  as  platform  specific, including 
  2373.     _JRCPP). Since this pragma is not a an ANSI standard feature, the 
  2374.     underlying  source  file  may  not be fully portable (i.e., other 
  2375.     implementation would still have the  macro  definitions  intact). 
  2376.     Since this directive is commonly used in conjunction with JRCPP's 
  2377.     capability  of  precalculating  a  combined  header  file,  which 
  2378.     requires  JRCPP  functionality,  this  diagnostic  is often quite 
  2379.     acceptable.
  2380.  
  2381. H, 4079, "use of bulk undefine may limit portability"
  2382.  
  2383.     The  directive   "#pragma   undefine_macros   command_line"   has 
  2384.     requested that several macros be undefined (specifically, all the 
  2385.     macros that were defined on the command line).  Since this pragma 
  2386.     is not a an ANSI standard feature, the underlying source file may 
  2387.     not be fully portable (i.e.,  other  implementation  would  still 
  2388.     have the macro definitions, if any, intact). Since this directive 
  2389.     is commonly  used  in  conjunction  with  JRCPP's  capability  of 
  2390.     precalculating  a  combined  header  file,  which  requires JRCPP 
  2391.     functionality, this diagnostic is often quite acceptable.
  2392.  
  2393. H, 4080, "use of bulk undefine may limit portability"
  2394.  
  2395.     The directive "#pragma undefine_macros user" has  requested  that 
  2396.     several  macros  be  undefined (specifically, all the macros that 
  2397.     have been defined from within  any  source  files).   Since  this 
  2398.     pragma  is  not a an ANSI standard feature, the underlying source 
  2399.     file may not be fully portable (i.e., other implementation  would 
  2400.     still  have  the  macro  definitions, if any, intact). Since this 
  2401.     directive is commonly used in conjunction with JRCPP's capability 
  2402.     of  precalculating  a  combined header file, which requires JRCPP 
  2403.     functionality, this diagnostic is often quite acceptable.
  2404.  
  2405. E, 5001, "#error encountered"
  2406.  
  2407.     A "#error" directive was found in active code (i.e.: it  was  not 
  2408.     ifdef-ed  out).   The text following the directive is supplied as 
  2409.     part of the diagnostic.
  2410.  
  2411. W, 5002, "unrecognized #pragma"
  2412.  
  2413.     A "#pragma" directive was encountered, but the text that followed 
  2414.     was meaningless to this preprocessor.  The pragma will be present 
  2415.     in the preprocessed output, but whitespace within the pragma will 
  2416.     not be preserved.
  2417.  
  2418. E, 5003, "unexpected token(s) on #ifdef line ignored"
  2419.  
  2420.     A  "#ifdef  identifier" directive was encountered, but there were 
  2421.     additional tokens on the  line  to  the  right  of  "identifier".  
  2422.     These extraneous tokens have been ignored.
  2423.  
  2424. E, 5004, "unexpected token(s) on #ifndef line ignored"
  2425.  
  2426.     A  "#ifndef identifier" directive was encountered, but there were 
  2427.     additional tokens on the  line  to  the  right  of  "identifier".  
  2428.     These extraneous tokens have been ignored.
  2429.  
  2430. E, 5005, "neither <...> nor "..." style include found"
  2431.  
  2432.     A "#include ...." directive was encountered.  Unfortunately, even 
  2433.     after macro expanding the token list (if any)  that  was  on  the 
  2434.     line, the token sequence did not combine to form any known format 
  2435.     for an include file name.  The directive has been ignored.
  2436.  
  2437. W, 5006, "cannot change 'fatal' default diagnostic level"
  2438.  
  2439.     The "#pragma diagnostic_adjust ..." pragma was supplied,  but  an 
  2440.     attempt  was  made  to  change  all  diagnostics  with  a default 
  2441.     severity level of Fatal  to  something  else.   Diagnostics  with 
  2442.     default  severity  of  fatal  cannot  be adjusted, and hence this 
  2443.     pragma is not valid as far as  JRCPP  is  concerned,  and  it  is 
  2444.     passed unchanged to the preprocessed output file.
  2445.  
  2446. H, 5007, "diagnostic display may be diminished"
  2447.  
  2448.     The  user  has  elected  to adjust some diagnostic level in a way 
  2449.     that may reduce the amount  of  diagnostic  information  that  is 
  2450.     produced.  The  user should be wary that errors may be identified 
  2451.     but not revealed, or severe errors may be downgraded to warnings, 
  2452.     and an output file may still be produced.
  2453.  
  2454. E, 5008, "only one ancestral path selection is allowed"
  2455.  
  2456.     The directive "#pragma include_search ..." was provided, but more 
  2457.     than    one    of    the    3    mutually    exclusive    options 
  2458.     "only_eldest_ancestor",       "only_youngest_ancestor",       and 
  2459.     "all_ancestors" was specified.  The later option was ignored, and 
  2460.     the  first  ancestral option will be acted on (assuming there are 
  2461.     no other syntax errors).
  2462.  
  2463. H, 5009, "non-ANSI C behavior requested"
  2464.  
  2465.     The #pragma  undefine_macros  has  requested  that  the  internal 
  2466.     definitions  of  __FILE__,  __LINE__,  __DATE__,  and __TIME__ be 
  2467.     removed from the the database.  This leaves open the  option  for 
  2468.     notably  non-ANSI  behavior,  as any and all of these identifiers 
  2469.     may now be redefined. Although this option  is  in  violation  of 
  2470.     ANSI,  utilizing  it  provides  an  easy method of falsifying the 
  2471.     value of __DATE__ and __TIME__ in order to  produce  a  mis-dated 
  2472.     compilation.
  2473.  
  2474. H, 5010, "non-ANSI C behavior requested"
  2475.  
  2476.     The  #pragma  undefine_macros  has  requested  that  the internal 
  2477.     definitions of __STDC__ be removed from the the  database.   This 
  2478.     leaves  open  the  option  for notably non-ANSI behavior, as this 
  2479.     identifier may now be  redefined.  Although  this  option  is  in 
  2480.     violation  of  ANSI,  it  provides  a simple method of creating a 
  2481.     preprocessor that can be used with  a  non-ANSI  compiler.   This 
  2482.     simulation  often  assists  in  porting  code  that  has built in 
  2483.     dependency on the value of __STDC__ in hopes of easing a port.
  2484.  
  2485. H, 5011, "non-ANSI C behavior requested"
  2486.  
  2487.     The directive "#pragma cplusplus_mode" was encountered.   One  of 
  2488.     the  results  of  this  pragma is that __STDC__ is undefined, and 
  2489.     made available for redefinition (note that __cplusplus takes  its 
  2490.     place).   Since this option removes an "unremovable" aspect of an 
  2491.     ANSI C preprocessor, the performance is clearly  non-ANSI.   Also 
  2492.     note  that  //  style  comments  are  being  supported, which may 
  2493.     further violate ANSI C behavior.
  2494.  
  2495. H, 5012, "non-ANSI C behavior requested"
  2496.  
  2497.     The directive "#pragma cplusplus_comment  ..."  was  encountered. 
  2498.     The  //  style  comments  are being supported as a consequence of 
  2499.     this pragma, and hence ANSI C compatibility cannot be guaranteed.
  2500.  
  2501. H, 5013, "non-ANSI C behavior requested"
  2502.  
  2503.     The  directive  "#pragma  space_between_tokens  ..."   has   been 
  2504.     observed,   and   as   a   result,  additional  spaces  will  not 
  2505.     automatically be added to the output file.   The  consequence  of 
  2506.     this  omission  is  that  certain token pairs may, if they do not 
  2507.     already have  white  space  separation,  "flow  together".   This 
  2508.     result  is  occasionally  desirable  when  attempting to simulate 
  2509.     certain aspects of a classical C preprocessor (re:  the  Reismann 
  2510.     model).   This  flowing  together  of  tokens may cause effective 
  2511.     pasting of consecutive tokens, and  a  net  effect  of  providing 
  2512.     non-ANSI C compliant preprocessing.
  2513.  
  2514.  
  2515.  
  2516.  
  2517. F, 6001, "lexical scanner reading source: ...message..."
  2518.  
  2519.     This  diagnostic  is  always  produced in conjunction with a more 
  2520.     detailed error 'message'.  This 'message' is usually "flex  input 
  2521.     buffer  overflowed".   If  any  other  'message' is produced as a 
  2522.     refinement  of  this  diagnostic,  it  should  be  considered  an 
  2523.     internal compiler error, and the software manufacturer or support 
  2524.     agency should be consulted.   The  typical  message  "flex  input 
  2525.     buffer  overflowed"  indicates that an attempt was made to form a 
  2526.     token that was larger than a hard wired static buffer (currently, 
  2527.     511  characters).   Although  this  message  can  be generated by 
  2528.     providing a single token (such as an  identifier  name)  that  is 
  2529.     longer  than  511  characters,  there  is  a  more  likely  cause 
  2530.     involving comments.   Comments  are  broken  into  "pieces"  that 
  2531.     correspond   to   "logical   lines".    A  logical  line  is  the 
  2532.     concatenation of a  series  of  physical  lines  accomplished  by 
  2533.     placing  backslash  ("\")  characters  at the end of lines.  This 
  2534.     practice of concatenating lines is most common  when  defining  a 
  2535.     long  and complex macro. If, for example, such a macro definition 
  2536.     exceeded 511 characters, AND an attempt was made to  comment  out 
  2537.     the  macro  by  enclosing it in comment delimiters "/*" and "*/", 
  2538.     then this message would be produced.  The  work  around  in  this 
  2539.     "most common" of these "extremely rare" cases is to use enclosing 
  2540.     "#if 0" and "#endif"  to  remove  the  code  from  consideration, 
  2541.     rather  than  using  comment delimiters.  Note that this is NOT a 
  2542.     problem that occurs when comments are simply long,  as  they  are 
  2543.     then  considered  to  be  a series of "comment segments", each of 
  2544.     which corresponds to a physical line,  which  is  generally  much 
  2545.     less than 512 characters in length.  Note also that with features 
  2546.     provided in ANSI C involving the placement of consecutive  string 
  2547.     literals,  and  the  interpretation  of such sequences, it is not 
  2548.     necessary to have string literals that are over 511 characters in 
  2549.     length  (including the delimiting quotes).  See BUGS/FEATURES for 
  2550.     additional comments.
  2551.  
  2552. F, 6002, "lexical scanner reading pasted text: ...message..."
  2553.  
  2554.     This diagnostic is always produced in  conjunction  with  a  more 
  2555.     detailed   'message'   (depending   on  the  problem).   If  this 
  2556.     diagnostic is  produced  it  should  be  considered  an  internal 
  2557.     compiler  error,  and the software manufacturer or support agency 
  2558.     should be consulted.
  2559.  
  2560. F, 6003, "preprocessing token parser error: yacc stack overflow"
  2561.  
  2562.     This message indicates that the level of nesting of  preprocessor 
  2563.     if  directives  is too large for the current parser.  The current 
  2564.     limit is at least 50 levels of if directives deep, and this limit 
  2565.     is  only  significant  if  all the nested if statements have both 
  2566.     "#elif" and "#else" sections, AND the nesting is through the else 
  2567.     clauses.   As  a  practical  matter,  this  limit should be of no 
  2568.     importance to a user.  See BUGS/FEATURES for more details.
  2569.  
  2570. E, 6004, "#if/elif evaluated false due to: yacc stack overflow"
  2571.  
  2572.     This message indicates that the level of  nesting  complexity  of 
  2573.     the  expression  provided in a "#if" or "#elif" directive exceeds 
  2574.     about 75 levels of parenthesis, or  about  30  levels  of  nested 
  2575.     conditional   expressions  (re:  the  ternary  operator  sequence 
  2576.     "a?b:c").  This should be of little consequence to  a  user,  but 
  2577.     see BUGS/FEATURES for more details.
  2578.  
  2579.  
  2580. F, 6005, "out of memory. Object requested was ..."
  2581.  
  2582.     The  preprocessor  was  unable  to  allocate  any more memory for 
  2583.     preprocessing.  This error is most  common  under  MSDOS.   While 
  2584.     running  in MSDOS, be sure that you are not running in a "command 
  2585.     shell" underneath a program that is using up a  lot  of  physical 
  2586.     memory   (some   "make"   utilities  demonstrate  this  "hoggish" 
  2587.     feature).  Also under MSDOS, if you have  not  already  done  so, 
  2588.     purchasing  and  installing  additional  memory,  up  to the full 
  2589.     640KByte limit, can often prevent this diagnostic.  This  problem 
  2590.     can  be  reduced  (and often removed) under MSDOS by reducing the 
  2591.     number of TSR (Terminate and Stay Resident)  programs  that  have 
  2592.     been  installed.   On  virtual  memory  systems, such as OS/2 and 
  2593.     UNIX, this error should only occur if  virtual  memory  has  been 
  2594.     exhausted  by filling all available swap space available on disk.  
  2595.     Solutions to this problem in  a  virtual  memory  system  include 
  2596.     purchasing additional physical memory (i.e., RAM), and purchasing 
  2597.     or enlarging the available swap space (i.e., get a  bigger  disk, 
  2598.     and/or  set  up  the swap area on a partition with more available 
  2599.     space).
  2600.  
  2601.  
  2602. F, 6006, "out of memory during character pool reallocation"
  2603.  
  2604.     JRCPP exhausted available memory.  This problem occurred  when  a 
  2605.     new  heap  (character  pool) was being created to hold additional 
  2606.     strings of text (generally, the spellings of tokens).
  2607.  
  2608. F, 6007, "out of memory during concatenation operation"
  2609.  
  2610.     JRCPP exhausted available memory.  This problem occurred when two 
  2611.     tokens strings were being concatenated, and a working area needed 
  2612.     to be allocated.
  2613.  
  2614. F, 6008, "out of memory during stringize operation"
  2615.  
  2616.     JRCPP exhausted available memory.  This problem occurred  when  a 
  2617.     token's  spelling  was  being "stringized" (enclosed in quotes as 
  2618.     requested by the # operator), and a working  area  needed  to  be 
  2619.     allocated.
  2620.  
  2621. F, 6009, "out of memory while unquoting file name"
  2622.  
  2623.     JRCPP  exhausted  available memory.  This problem occurred when a 
  2624.     file name provided in an #line directive had to be extracted, and 
  2625.     a working area needed to be allocated.
  2626.  
  2627. F, 6010, "out of memory while extracting name in include directive"
  2628.  
  2629.     JRCPP  exhausted  available memory.  This problem occurred when a 
  2630.     file name provided in an #include directive had to  be  extracted 
  2631.     from the surrounding quotes or angle brackets, and a working area 
  2632.     needed to be allocated.
  2633.  
  2634. F, 6011, "out of memory while extracting directory prefix"
  2635.  
  2636.     JRCPP exhausted available memory.  This  problem  occurred  while 
  2637.     processing  a  #include  directive.   The  path  prefix was being 
  2638.     extracted from some ancestral include file, and  a  working  area 
  2639.     needed to be allocated.
  2640.  
  2641. E, 6012, "#if/elif evaluated false due to division by zero"
  2642.  
  2643.     The  evaluation  of  the  token  sequence  on a #if or #elif line 
  2644.     required a division by an expression that evaluated to zero.  The 
  2645.     evaluator  has  abandoned  examination of the expression, and has 
  2646.     supplied a default (error recovery) evaluation of FALSE.
  2647.  
  2648.  
  2649. E, 6013, "#if/elif evaluated false due to modulus of zero"
  2650.  
  2651.     The evaluation of the token sequence  on  a  #if  or  #elif  line 
  2652.     required  taking  the  modulus by an expression that evaluated to 
  2653.     zero (example: 4 % 0). The evaluator has abandoned examination of 
  2654.     the  expression,  and  has  supplied  a  default (error recovery) 
  2655.     evaluation of FALSE.
  2656.  
  2657.