DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(m4.info.gz) Other Incompat

Info Catalog (m4.info.gz) Incompatibilities (m4.info.gz) Compatibility
 
 Other incompatibilities
 =======================
 
    There are a few other incompatibilities between this implementation
 of `m4', and the System V version.
 
    * GNU `m4' implements sync lines differently from System V `m4',
      when text is being diverted.  GNU `m4' outputs the sync lines when
      the text is being diverted, and System V `m4' when the diverted
      text is being brought back.
 
      The problem is which lines and filenames should be attached to
      text that is being, or has been, diverted.  System V `m4' regards
      all the diverted text as being generated by the source line
      containing the `undivert' call, whereas GNU `m4' regards the
      diverted text as being generated at the time it is diverted.
 
      I expect the sync line option to be used mostly when using `m4' as
      a front end to a compiler.  If a diverted line causes a compiler
      error, the error messages should most probably refer to the place
      where the diversion were made, and not where it was inserted again.
 
    * GNU `m4' makes no attempt at prohiting autoreferential definitions
      like:
 
           define(`x', `x')
           define(`x', `x ')
 
      There is nothing inherently wrong with defining `x' to return `x'.
      The wrong thing is to expand `x' unquoted.  In `m4', one might
      use macros to hold strings, as we do for variables in other
      programming languages, further checking them with:
 
           ifelse(defn(`HOLDER'), `VALUE', ...)
 
      In cases like this one, an interdiction for a macro to hold its own
      name would be a useless limitation.  Of course, this leave more
      rope for the GNU `m4' user to hang himself!  Rescanning hangs may
      be avoided through careful programming, a little like for endless
      loops in traditional programming languages.
 
    * GNU `m4' without `-G' option will define the macro `__gnu__' to
      expand to the empty string.
 
      On UNIX systems, GNU `m4' without the `-G' option will define the
      macro `__unix__', otherwise the macro `unix'.  Both will expand to
      the empty string.
 
Info Catalog (m4.info.gz) Incompatibilities (m4.info.gz) Compatibility
automatically generated byinfo2html