C alternative tokens

{{Short description|C standard library header providing a set of alternative spellings of common operators}}

{{C Standard Library}}

C alternative tokens refer to a set of alternative spellings of common operators in the C programming language. They are implemented as a group of macro constants in the C standard library in the iso646.h header. The tokens were created by Bjarne Stroustrup for the pre-standard C++ language{{cite web |title=CppCon 2017: Panel "Grill the Committee" | website=YouTube |url=https://www.youtube.com/watch?v=JYG5LFHkUuE&t=4582 |archive-url=https://ghostarchive.org/varchive/youtube/20211212/JYG5LFHkUuE| archive-date=2021-12-12 |url-status=live}}{{cbignore}} and were added to the C standard in a 1995 amendment to the C90 standard via library to avoid the breakage of existing code.

The alternative tokens allow programmers to use C language bitwise and logical operators which could otherwise be hard to type on some international and non-QWERTY keyboards. The name of the header file they are implemented in refers to the ISO/IEC 646 standard, a 7-bit character set with a number of regional variations, some of which have accented characters in place of the punctuation marks used by C operators.

The macros

The iso646.h header defines the following 11 macros as stated below:{{cite web |title=Rationale for International Standard - Programming Languages - C |version=5.10 |date=April 2003 |url=http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |access-date=2010-10-17 |url-status=live |archive-url=https://web.archive.org/web/20160606072228/http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf |archive-date=2016-06-06}}

class="wikitable" style="text-align:center"
style="padding-left:1em;padding-right:1em" | Macro

! Defined as

and&&
and_eq&=
bitand&
bitor|
compl~
not!
not_eq!=
or
or_eq|=
xor^
xor_eq^=

C++

The above-mentioned identifiers are operator keywords in the ISO C++ programming language and do not require the inclusion of a header file.{{cite book |title=Design and Evolution of C++ |author-first=Bjarne |author-last=Stroustrup |author-link=Bjarne Stroustrup |publisher=Addison-Wesley Publishing Company |edition=1st |date=1994-03-29 |isbn=0-201-54330-3}} For consistency, the C++98 standard provided both <iso646.h> and a corresponding <ciso646>. However they both had no effect, being empty.{{cite book | isbn = 0-596-00298-X | title = C++ in a Nutshell | last = Lischner | first = Ray | page = 384 | publisher = O'Reilly Media | year = 2003 }}{{cite book|first1=Peter|last1=Van Weert|first2=Marc|last2=Gregoire|year=2019|title=C++17 Standard Library Quick Reference|publisher=Apress|isbn=9781484249239|page=277}} Some compilers, such as Microsoft Visual C++ have, at least in the past, required the header to be included in order to use these identifiers unless a compiler flag is set.{{cite book|first1=Paul|last1=Deitel|first2=Harvey M.|last2=Deitel|title=C++11 for Programmers|year=2013|isbn=9780133439878|publisher=Pearson Education|page=928}}{{Cite web|date=2021-11-23|title=Logical AND Operator: &&|url=https://docs.microsoft.com/en-us/cpp/cpp/logical-and-operator-amp-amp?view=msvc-170#operator-keyword-for-|url-status=live|access-date=2021-12-27|website=Microsoft Docs|archive-url=https://web.archive.org/web/20211228013621/https://docs.microsoft.com/en-us/cpp/cpp/logical-and-operator-amp-amp?view=msvc-170 |archive-date=2021-12-28 }} The header <ciso646> was deprecated in C++17, and removed in C++20,{{cite web|title=|date=2021-12-07|first1=Tyler|last1=Whitney|url=https://learn.microsoft.com/en-us/cpp/standard-library/ciso646|website=Microsoft Learn}} while <iso646.h> was retained for compatibility with C.{{cite journal|first=Thomas|last=Köppe|date=2021-06-11|publisher=ISO/IEC JTC1 SC22 WG21|title=Clarifying the status of the "C headers"|journal=C++ Standards Committee Papers|url=https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2340r1.html|url-status=live|archive-date=2024-01-11|archive-url=https://web.archive.org/web/20240111125009/https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2340r1.html}}

See also

References

{{reflist}}