Talk:C alternative tokens

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject C/C++ (Rated Start-class, Low-importance)
WikiProject icon This article is within the scope of WikiProject C/C++, a collaborative effort to improve the coverage of C/C++ on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Start-Class article Start  This article has been rated as Start-Class on the quality scale.
 Low  This article has been rated as Low-importance on the importance scale.
Taskforce icon
This article falls within the scope of C.

ISO/IEC 646[edit]

Does it have something to do with ISO/IEC 646? --Abdull (talk) 20:09, 7 February 2008 (UTC)


Please confirm C99 as the introductory date. I believe this file predates that and was instead added with the Normative Amendment 1 in 1995 --Mario F. (talk) 12:19, 16 February 2008 (UTC)

Oops. Thanks for pointing this out. I will fix this. ← Michael Safyan (talk) 07:07, 17 February 2008 (UTC)


"These identifiers are operator keywords in the ISO C++ programming language..." have they always been there or added in some later standard, if so which standard does this refer to? ( (talk) 19:34, 8 January 2010 (UTC))

Visual c++[edit]

It doesn't have those operators automatically so if you want to use them you have to include the header. VC++ holds a large share of c++ development on windows so I feel that this should be mentioned, even if this behavior is still against the standards, its useful to know for those who want compatibility with most compilers. (talk) 19:31, 13 February 2011 (UTC)

Intent of iso646.h[edit]

This article mentions that the intent of iso646.h is to be able to input C source code with any variant of the ISO646 codepage.

According to the table listed in, the variable glyphs are:

  • # required for all preprocessor directives,
  • $, not used by C,
  • @, not used by C,
  • [ and ] used for dereferencing arrays – arrays can be accessed using pointer arithmetics since ptr[i] is syntactic sugar for *(ptr+i) but for static arrays, their declaration still needs those brackets,
  • \ used for:
    • encoding characters that in particular cannot be written as is in source code (classic examples: '\n', '\012', '\x0A'),
    • allowing a line to be continued on the next line (especially useful for macros),
  • ^ used for XORing, covered in iso646.h by xor and xor_eq,
  • { and } used for all blocks (functional and descriptive), required almost everywhere in C,
  • | used for OR operators, covered in iso646.h by or, bitor and or_eq,
  • ~ used for complementing a byte, covered in iso646.h by compl.

We can also notice that & and ! are not part of variable codes, while iso646.h proposes an alternate writing (and, and_eq, bitand, not, not_eq).

In parallel, digraphs and trigraphs have been developed...

My point of view is that this header is mostly a convenient way to write some operators (and only operators) using a textual and clear name instead of inserting symbols that, in fact for some, would require complex writing on restrictive variants of ISO646. It does not succeed at covering all cases, especially curly brackets that still need the use of digraphs and trigraphs. The header name may not be the most appropriate. Teuxe (talk) 17:32, 31 July 2012 (UTC)