議論/libc/ワイド文字


Top / 議論 / libc / ワイド文字

これは何か

進めかた

  1. Yumeさんが悩んでいることを書く
  2. みんなで考える。必須さんかメンバは Gakuさん、shadowさん、Yumeさん、Tinoさん、ひげぽん

文字コード

gcc

#include <stdio.h>
int main() {
  printf("sizeof(wchar_t)=%d,%d\n", sizeof(wchar_t), sizeof(L'a'));
  return 0;
}

Cygwinのgccでは2が返って来ますが(確認済)、 Linuxのgccでは4が返って来るのではないでしょうか(未確認)。
追記 by ひげぽん
Linuxでの実行結果

sizeof(wchar_t)=4,4
nobita% ls -l /lib/libc*
-rwxr-xr-x 1 root root 1137372 2006-05-22 03:46 /lib/libc-2.3.6.so

UTF-16

gccのオプションで-fshort-wcharというのがあって、 これを使用するとwchar_tが強制的に2バイトになります。

Cygwinのようにデフォルトで2バイトのものに関しては、 強制的に4バイトにする方法が分かりませんでした。 何かオプションがあるのかもしれませんが・・・。

ソースの文字コード

gcc-3.4からちゃんとiconvで変換するようになったようです。 gccの-finput-charsetを使うとソースの文字コードが指定できます。 何も指定しない場合はUTF-8として扱われます。

#include <stdio.h>
int main() {
  printf("Hiragana 'A' = U+%04X\n", (int)L'あ');
  return 0;
}

このようなものを書いてUTF-8で保存すると、 オプションなしでコンパイルできます。

$ gcc a.c
$ ./a
Hiragana 'A' = U+3042

SJISで保存した場合は次の通りです。

$ gcc a.c -finput-charset=cp932
$ ./a
Hiragana 'A' = U+3042

wchar_t

Cではtypedefですが、C++では予約語です。

以下のコードをa.cとして保存します。

extern
#ifdef __cplusplus
"C"
#endif
int printf(const char*, ...);

int main() {
  printf("sizeof(wchar_t)=%d\n", sizeof(wchar_t));
  return 0;
}

Cygwinでのテスト結果です。

$ gcc a.c
a.c: In function `main':
a.c:8: error: `wchar_t' undeclared (first use in this function)
a.c:8: error: (Each undeclared identifier is reported only once
a.c:8: error: for each function it appears in.)
$ g++ a.c
$ ./a
sizeof(wchar_t)=2

__WCHAR_TYPE__

gccの場合是がwchar_tの定義になるようです。(libcが是に合わせる必要がある。)

コメント

コメントはありません。 コメント/議論/libc/ワイド文字?

お名前:

MENU

now: 3

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 8243, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3766d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.171 sec.