std:: setlocale
|
헤더 파일에 정의됨
<clocale>
|
||
|
char
*
setlocale
(
int
category,
const
char
*
locale
)
;
|
||
setlocale
함수는 지정된 시스템 로케일 또는 그 일부를 새로운 C 로케일로 설정합니다. 이 변경 사항은 다음
setlocale
호출이 있을 때까지 유효하며, 모든 로케일 의존적 C 라이브러리 함수의 실행에 영향을 미칩니다.
locale
이 null 포인터인 경우,
setlocale
은 현재 C 로케일을 수정하지 않고 조회만 수행합니다.
목차 |
매개변수
| category | - |
로케일 카테고리 식별자,
LC_xxx
매크로 중 하나.
0
일 수 있음.
|
| locale | - | 시스템별 로케일 식별자. 사용자 선호 로케일을 위한 "" 또는 최소 로케일을 위한 "C" 일 수 있음 |
반환값
변경 사항을 적용한 후 C 로캘을 식별하는 좁은 널 종료 문자열에 대한 포인터, 또는 실패 시 널 포인터.
이 호출에서 사용된 카테고리와 함께 반환된 문자열의 복사본은 프로그램 후반에
std::setlocale
을 사용하여 로케일을 이 호출 종료 시점의 상태로 복원하는 데 사용될 수 있습니다.
참고 사항
프로그램 시작 시, 사용자 코드가 실행되기 전에 std :: setlocale ( LC_ALL , "C" ) ; 에 해당하는 작업이 수행됩니다.
반환 타입이 char * 이지만, 가리키는 문자들을 수정하는 것은 정의되지 않은 동작입니다.
setlocale
이 로케일 의존 함수들의 실행에 영향을 미치는 전역 상태를 수정하기 때문에, 한 스레드에서 다음 함수들 중 하나를 실행하는 동안 다른 스레드에서
setlocale
을 호출하는 것은 정의되지 않은 행동입니다:
std::fprintf
,
std::isprint
,
std::iswdigit
,
std::localeconv
,
std::tolower
,
std::fscanf
,
std::ispunct
,
std::iswgraph
,
std::mblen
,
std::toupper
,
std::isalnum
,
std::isspace
,
std::iswlower
,
std::mbstowcs
,
std::towlower
,
std::isalpha
,
std::isupper
,
std::iswprint
,
std::mbtowc
,
std::towupper
,
std::isblank
,
std::iswalnum
,
std::iswpunct
,
std::setlocale
,
std::wcscoll
,
std::iscntrl
,
std::iswalpha
,
std::iswspace
,
std::strcoll
,
std::wcstod
,
std::isdigit
,
std::iswblank
,
std::iswupper
,
std::strerror
,
std::wcstombs
,
std::isgraph
,
std::iswcntrl
,
std::iswxdigit
,
std::strtod
,
std::wcsxfrm
,
std::islower
,
std::iswctype
,
std::isxdigit
.
POSIX는 또한 "POSIX" 로 명명된 locale을 정의하며, 이는 항상 접근 가능하고 기본 최소 "C" locale과 완전히 동일합니다.
POSIX는 반환된 포인터뿐만 아니라 가리키는 문자열의 내용도 이후
setlocale
호출에 의해 무효화될 수 있다고 명시합니다.
예제
#include <clocale> #include <cstdio> #include <ctime> #include <cwchar> #include <iterator> #include <string> int main() { // 현재 로케일 이름의 "깊은 복사본"을 만듭니다. std::string prev_loc = std::setlocale(LC_ALL, nullptr); // C 로케일은 UTF-8 지원 영어가 되고, // 소수점은 독일식이 되며, // 날짜와 시간 형식은 일본식이 됩니다. if (const char* loc = std::setlocale(LC_ALL, "en_US.UTF-8")) std::wprintf(L"New LC_ALL locale: %s\n", loc); if (const char* loc = std::setlocale(LC_NUMERIC, "de_DE.UTF-8")) std::wprintf(L"New LC_NUMERIC locale: %s\n", loc); if (const char* loc = std::setlocale(LC_TIME, "ja_JP.UTF-8")) std::wprintf(L"New LC_TIME locale: %s\n", loc); wchar_t buf[100]; std::time_t t = std::time(nullptr); std::wcsftime(buf, std::size(buf), L"%A %c", std::localtime(&t)); std::wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, buf); // 이전 로케일을 복원합니다. if (const char* loc = std::setlocale(LC_ALL, prev_loc.c_str())) std::wprintf(L"Restorred LC_ALL locale: %s\n", loc); }
가능한 출력:
New LC_ALL locale: en_US.UTF-8 New LC_NUMERIC locale: de_DE.UTF-8 New LC_TIME locale: ja_JP.UTF-8 Number: 3,14 Date: 日曜日 2022年11月06日 20時40分59秒 Restorred LC_ALL locale: C
참고 항목
|
std::setlocale
을 위한 locale 카테고리
(매크로 상수) |
|
|
문화적 차이를 캡슐화하는 다형성 패싯들의 집합
(클래스) |
|
|
C 문서
for
setlocale
|
|
외부 링크
| 1. | Windows 로캘 이름 목록 . |
| 2. | Linux 로캘 이름 목록 . |