Wchar tとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > Wchar tの意味・解説 

ワイド文字

(Wchar t から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/08/22 16:49 UTC 版)

ワイド文字(ワイドもじ、: wide character)とは、主にC言語およびC++における文法要素で、1文字あたりのバイト数を通常より多くしたデータ型である。

概要

C言語やC++の基本実行文字集合は通常、ASCIIのサブセットの文字種からなる。ただし実際の文字コードが何であるかは規定されていない。

漢字のような拡張実行文字集合は、通常マルチバイト文字として扱われるが、1文字を構成するバイト数が可変長であり、本来1つの文字でありながら複数の文字の組(あるいは文字列)として扱わなければならないなどの不便がある。そうした問題を解消するために、1文字を1つの整数値で扱えるようにすることを目指したのがワイド文字である。

wchar_t型

C言語では1995年の ISO/IEC 9899/AMD1:1995 より、wchar_t 型や <wchar.h>、<wctype.h> などのヘッダーファイルが追加になった。ワイド文字は wchar_t というデータ型で表現する。char型を用いた文字および文字列の場合、文字定数 (character constant)[1] および文字列リテラル (string literal)[2]ソースコード中で、例えばそれぞれ「'c'」および「"str"」と表記する。これに対応するように、ワイド文字定数は大文字のエルによるプレフィックスLを付けて「L'c'」と表記する。同様に、ワイド文字から構成される文字列をワイド文字列と呼び、そのリテラルは「L"str"」と表記する。従来の文字定数はchar型ではなくint型だったが、ワイド文字定数はwchar_t型を持つ。従来の文字列リテラルはchar[]型だったが、ワイド文字列リテラルはwchar_t[]型を持つ。

C言語での wchar_t は単なるtypedefによるエイリアス(他の型の別名として定義されている)であるが、C++においてはキーワード(予約語)である。コンパイラによっては、「wchar_t」を組み込みの型とみなすか否かをコンパイラの設定で切り替えられるものもある[3]。なおC++の場合、文字定数という用語はなく、文字リテラル (character literal) と呼ばれている[4]。文字リテラルはchar型を持ち、ワイド文字リテラルはwchar_t型を持つ。文字列リテラルはconst char[]型を持ち、ワイド文字列リテラルはconst wchar_t[]型を持つ。

C99 規格や C++98 規格の場合、ワイド文字定数・文字列リテラルには ISO 10646 文字集合の数値で表現するユニバーサル文字名を使用することもできる。

内部表現

char型のサイズは常に1バイトであることがC/C++規格で保証される[5]。つまり、sizeof(char) == 1は常に真である。

一方、wchar_t 型は C および C++ 双方の標準規格において、符号付きの場合は少なくとも-127から+127まで、符号無しの場合は少なくとも0から255までの範囲を表現できる数値型[6]、ということのみ定められている(少なくともchar型と同じ大きさが必要)。charがASCIIであるとは限らなかったり、floatdoubleIEEE 754単精度倍精度であるとは限らなかったりすることと同様に、wchar_tの内部表現もUnicodeである必要はない。本来はCode Set Independent(符号化集合に独立)なのである。

wchar_t 型のサイズと符号化形式は、例えばWindowsでは2バイト (16ビット) のUTF-16であり、LinuxmacOSでは4バイト (32ビット) のUTF-32である。しかし、その他の環境でもUnicodeを用いた符号化形式であると誤解されて、あるいは仮定してプログラムが作られることがある[要出典]。そのようなプログラムは、Unicodeを用いた符号化形式とは限らない一般のUnixなどへの移植の際に問題が表面化する。なお、C99より、wchar_tUnicodeと互換性のある場合、__STDC_ISO_10646__が事前定義されると定められている。C++11でもC99互換の定義済みマクロが導入された [7]

char16_t, char32_t型

ワイド文字の問題は、前述のように型のサイズや符号化形式が規定されておらず、プラットフォームおよび処理系依存であることである。Unicodeが普及するにつれて、移植性の問題が表面化してきた。

2011年に改訂された C/C++ の標準規格、C11C++11 では、新たに2つの文字型 char16_tchar32_t が導入された。これらはそれぞれ UTF-16UTF-32 を内部表現とする。u'c'U'c' あるいは u"str"U"str" のように小文字の u あるいは大文字の U を前置することで、それぞれ char16_tchar32_t の文字定数・文字列リテラルを表現する。また、u8 を前置することで UTF-8 の文字列リテラルを表現する[8]が、C++17まではchar8_t型は存在せず、従来のchar型で代用する仕様だった。C++17ではUTF-8の文字リテラルをサポートするようになったが、その型はcharであった[4]C++20ではchar8_t型がサポートされるようになり、UTF-8文字リテラルの型とUTF-8文字列リテラルの型もそれぞれchar8_tconst char8_t[]に仕様変更された[9]

C言語の場合char16_tおよびchar32_tはそれぞれuint_least16_tおよびuint_least32_tのtypedefエイリアスであるが、C++の場合char16_tおよびchar32_tはキーワードであり、それぞれstd::uint_least16_tおよびstd::uint_least32_tと同じサイズではあるものの、別の型として規定されている[10]

いずれの言語においても、char16_t型のサイズは16ビットよりも大きい可能性があるが、格納される値は16ビット幅である[11]。同様に、char32_t型のサイズは32ビットよりも大きい可能性があるが、格納される値は32ビット幅である[12]

D言語

D言語では、charと別に、次の2つの文字型が用意されている。

wchar
UTF-16を格納する16ビットの文字型
dchar
UTF-32を格納する32ビットの文字型

脚注

関連項目


「Wchar t」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

Wchar tのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Wchar tのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのワイド文字 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS