Funkcje lokalizacyjne C
Standardowa biblioteka C (libc) |
---|
Tematy ogólne |
Różne nagłówki |
W informatyce funkcje lokalizacyjne C to grupa funkcji w języku programowania C , realizująca podstawowe procedury lokalizacyjne. Funkcje są używane w programach wielojęzycznych w celu dostosowania do określonych ustawień regionalnych. W szczególności można modyfikować sposób wyświetlania liczb i waluty. Te ustawienia wpływają na zachowanie funkcji wejścia/wyjścia w standardowej bibliotece C.
Przegląd funkcji
Funkcje i typy lokalizacji C są zdefiniowane w locale.h ( nagłówek clocale w C++).
Funkcjonować | Opis |
---|---|
ustaw język | ustawia i pobiera bieżące ustawienia regionalne C |
konw.lokalna | zwraca szczegóły formatowania numerycznego i pieniężnego dla bieżących ustawień regionalnych |
Krytyka
Standardowe funkcje lokalizacyjne C są krytykowane, ponieważ stan lokalizacji jest przechowywany globalnie. Oznacza to, że w danym programie wszystkie operacje związane z ustawieniami narodowymi mogą w danej chwili używać tylko jednego ustawienia narodowego. W rezultacie bardzo trudno jest zaimplementować programy korzystające z więcej niż jednej lokalizacji.
Funkcje zmieniają zachowanie printf/scanf/strtod, które są często używane do zapisywania zapisanych danych do pliku lub do innych programów. W rezultacie plik zapisany w jednej lokalizacji nie będzie czytelny w innej lokalizacji lub w ogóle nie będzie możliwy do odczytania z powodu takich założeń, jak „liczby kończą się przecinkami”. Większość oprogramowania na dużą skalę wymusza ustawienia regionalne na „C” (lub inną stałą wartość), aby obejść te problemy.
Przykład
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main ( void ) { /* Ustawienia regionalne są wcześniej ustawione na „C”. To wywołanie ustawia go na „bieżące ustawienia regionalne” przez odczytanie zmiennych środowiskowych: */ setlocale ( LC_ALL , „” ); const struct lconv * const currentlocale = localeconv (); printf ( "W bieżących ustawieniach narodowych domyślnym symbolem waluty jest: %s \n " , currentlocale -> currency_symbol ); powrót EXIT_SUCCESS ; }