Loading article…
コンピューティングにおいて、Cローカリゼーション関数は、基本的なローカリゼーションルーチンを実装するCプログラミング言語の関数のグループです。 [1] [2]これらの関数は、多言語プログラムで特定のロケールに適応するために使用されます。特に、数値と通貨の表示方法を変更できます。これらの設定は、 C標準ライブラリの入出力関数の動作に影響します。[3]
機能の概要
Cのローカリゼーション関数と型はlocale.h( C++ではclocaleヘッダー)で定義されています。[4] [5]
批判
C標準のローカリゼーション関数は、ローカリゼーション状態がグローバルに保存されるため批判されています。つまり、特定のプログラムでは、ロケールに関連するすべての操作で一度に1つのロケールしか使用できません。その結果、複数のロケールを使用するプログラムを実装することは非常に困難です。[6]
これらの関数は、保存されたデータをファイルまたは他のプログラムに書き込むためによく使用される printf/scanf/strtod の動作を変更します。その結果、あるロケールで保存されたファイルは別のロケールでは読み取れなくなるか、 「数字はカンマ文字で終わる」などの仮定によりまったく読み取れなくなります。ほとんどの大規模ソフトウェアは、これらの問題を回避するためにロケールを「C」(または別の固定値) に強制します。
例
#include <stdio.h> #include <stdlib.h> #include <locale.h>
int main ( void ) { /* この前はロケールは "C" に設定されています。この呼び出しは 、環境変数を読み取って "現在のロケール" に設定します: */ setlocale ( LC_ALL , "" );
const構造体lconv * const currentlocale = localeconv ();
printf ( "現在のロケールでは、デフォルトの通貨記号は: %s \n " 、
currentlocale -> currency_symbol );
EXIT_SUCCESSを返します。}
参照
参考文献
- ^ ISO/IEC 9899:1999 仕様(PDF)。p. 204、§ 7.11ローカリゼーション。
- ^ Prata, Stephen (2004). C primer plus . Sams Publishing. 付録 B、セクション V: C99 追加機能を備えた標準 ANSI C ライブラリ。ISBN 0-672-32696-5。
- ^ 「ISO/IEC 9899:201x」(PDF) 2011年4月12日、p. 181。2018年3月29日時点のオリジナル(PDF)からのアーカイブ。
- ^ "locale.h". utas.edu.au . infosys. 2012年6月4日時点のオリジナルよりアーカイブ。2011年9月14日閲覧。
- ^ "openbsd/src". GitHub . 2018年4月9日閲覧。
- ^ 「標準 C ロケールと標準 C++ ロケール」 Rogue Wave Software, Inc. 1996 年。2020 年 2 月 19 日時点のオリジナルよりアーカイブ。2011 年11 月 10 日閲覧。
