std::iswcntrl(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::iswcntrl(3) πŸ’–

okay so this page is from the C++ Standard Libary manual (yes, that's literally how it's spelled, no cap) and it's all about std::iswcntrl. Buckle up, bestie, we're checking wide control characters. πŸŽ€

🌸 NAME 🌸

std::iswcntrl β€” std::iswcntrl (the name is the name, periodt). πŸ’…

✨ Synopsis ✨

Defined in header <cwctype>

int iswcntrl( std::wint_t ch );

Checks if the given wide character is a control character, i.e. codes 0x00-0x1F and 0x7F and any control characters specific to the current locale. πŸ¦‹

⚠️ If the value of ch is neither representable as a wchar_t nor equal to the value of the macro WEOF, the behavior is undefined. That's undefined behavior, bestie β€” do not play with it. πŸ’€

πŸŽ€ Parameters πŸŽ€

  • ch β€” wide character. That's the whole parameter. Slay simplicity. 🫢

🌈 Return value 🌈

Non-zero value if the wide character is a control character, zero otherwise. Easy peasy. ✨

πŸ¦‹ Notes πŸ¦‹

ISO 30112 defines POSIX control characters as Unicode characters U+0000..U+001F, U+007F..U+009F, U+2028, and U+2029 (Unicode classes Cc, Zl, and Zp). Iconic standardization behavior. πŸ‘‘

πŸ”₯ Example πŸ”₯

// Run this code

#include <clocale>
#include <cwctype>
#include <iostream>

int main()
{
    wchar_t c = L'\u2028'; // the Unicode character "line separator"

    std::cout << std::hex << std::showbase << std::boolalpha;
    std::cout << "in the default locale, iswcntrl(" << (std::wint_t)c << ") = "
              << (bool)std::iswcntrl(c) << '\n';
    std::setlocale(LC_ALL, "en_US.utf8");
    std::cout << "in Unicode locale, iswcntrl(" << (std::wint_t)c << ") = "
              << (bool)std::iswcntrl(c) << '\n';
}

πŸ’» Output πŸ’»

in the default locale, iswcntrl(0x2028) = false
in Unicode locale, iswcntrl(0x2028) = true

πŸ‘€ See also πŸ‘€

  • iscntrl(std::locale) β€” checks if a character is classified as a control character by a locale (function template). πŸ’–
  • iscntrl β€” checks if a character is a control character (function). ✨
  • C documentation for iswcntrl β€” the C version is also a thing, iykyk. 🫢

πŸ“Š ASCII values table πŸ“Š

okay so here's the big ASCII classification chart. The original header lists these columns: iscntrl, isprint, isspace, isblank, isgraph, ispunct, isalnum, isalpha, isupper, islower, isdigit, isxdigit, and also the wide-char ones: iswcntrl, iswprint, iswspace, iswblank, iswgraph, iswpunct, iswalnum, iswalpha, iswupper, iswlower, iswdigit, iswxdigit. The rows below show the 12 classification flags as they appear in the original table. No cap, it's a lot. 🌈

dec       hex         oct         char                            iscntrl  isprint  isspace  isblank  isgraph  ispunct  isalnum  isalpha  isupper  islower  isdigit  isxdigit
0–8       \x0–\x8     \0–\10      control codes (NUL, etc.)       β‰ 0       0        0        0        0        0        0        0        0        0        0        0
9         \x9         \11         tab (\t)                        β‰ 0       0        β‰ 0       β‰ 0       0        0        0        0        0        0        0        0
10–13     \xA–\xD     \12–\15     (\n, \v, \f, \r) whitespaces    β‰ 0       0        β‰ 0       0        0        0        0        0        0        0        0        0
14–31     \xE–\x1F    \16–\37     control codes                   β‰ 0       0        0        0        0        0        0        0        0        0        0        0
32        \x20        \40         space                           0        β‰ 0       β‰ 0       β‰ 0       0        0        0        0        0        0        0        0
33–47     \x21–\x2F   \41–\57     !"#$%&'()*+,-./                 0        β‰ 0       0        0        β‰ 0       β‰ 0       0        0        0        0        0        0
48–57     \x30–\x39   \60–\71     0123456789                      0        β‰ 0       0        0        β‰ 0       0        β‰ 0       0        0        0        β‰ 0       β‰ 0
58–64     \x3A–\x40   \72–\100    :;<=>?@                         0        β‰ 0       0        0        β‰ 0       β‰ 0       0        0        0        0        0        0
65–70     \x41–\x46   \101–\106   ABCDEF                          0        β‰ 0       0        0        β‰ 0       0        β‰ 0       β‰ 0       β‰ 0       0        0        β‰ 0
71–90     \x47–\x5A   \107–\132   GHIJKLMNOPQRSTUVWXYZ            0        β‰ 0       0        0        β‰ 0       0        β‰ 0       β‰ 0       β‰ 0       0        0        0
91–96     \x5B–\x60   \133–\140   [\]^_`                          0        β‰ 0       0        0        β‰ 0       β‰ 0       0        0        0        0        0        0
97–102    \x61–\x66   \141–\146   abcdef                          0        β‰ 0       0        0        β‰ 0       0        β‰ 0       β‰ 0       0        β‰ 0       0        β‰ 0
103–122   \x67–\x7A   \147–\172   ghijklmnopqrstuvwxyz            0        β‰ 0       0        0        β‰ 0       0        β‰ 0       β‰ 0       0        β‰ 0       0        0
123–126   \x7B–\x7E   \172–\176   {|}~                            0        β‰ 0       0        0        β‰ 0       β‰ 0       0        0        0        0        0        0
127       \x7F        \177        backspace character (DEL)       β‰ 0       0        0        0        0        0        0        0        0        0        0        0

🌈 that's the whole page, bestie! source/version: http://cppreference.com Β· date: 2024.06.10 Β· page: std::iswcntrl(3). stay slay and don't pass invalid ch values. mwah πŸ’‹βœ¨
πŸ“¦ where this page comes from