Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

8.1.5 Quadrigraphs

When writing an Autoconf macro you may occasionally need to generate special characters that are difficult to express with the standard Autoconf quoting rules. For example, you may need to output the regular expression ‘[^[]’, which matches any character other than ‘[’. This expression contains unbalanced brackets so it cannot be put easily into an M4 macro.

You can work around this problem by using one of the following quadrigraphs:

@<:@
[
@:>@
]
@S|@
$
@%:@
#
@&[email protected]
Expands to nothing.

Quadrigraphs are replaced at a late stage of the translation process, after m4 is run, so they do not get in the way of M4 quoting. For example, the string ‘^@<:@’, independently of its quotation, appears as ‘^[’ in the output.

The empty quadrigraph can be used:

  • to mark trailing spaces explicitly

    Trailing spaces are smashed by autom4te. This is a feature.

  • to produce other quadrigraphs

    For instance ‘@<@&[email protected]:@’ produces ‘@<:@’.

  • to escape occurrences of forbidden patterns

    For instance you might want to mention AC_FOO in a comment, while still being sure that autom4te still catches unexpanded ‘AC_*’. Then write ‘[email protected]&[email protected]_FOO’.

The name ‘@&[email protected]’ was suggested by Paul Eggert:

I should give some credit to the ‘@&[email protected]’ pun. The ‘&’ is my own invention, but the ‘t’ came from the source code of the algol68c compiler, written by Steve Bourne (of Bourne shell fame), and which used ‘mt’ to denote the empty string. In C, it would have looked like something like:
          char const mt[] = "";
     

but of course the source code was written in Algol 68.

I don't know where he got ‘mt’ from: it could have been his own invention, and I suppose it could have been a common pun around the Cambridge University computer lab at the time.


 
 
  Published under the terms of the GNU General Public License Design by Interspire