5.7.7. _get_lc_numeric()

_get_lc_numeric()__lc_numeric_blk 구조에 대한 포인터를 반환해야 합니다. Example 5.7의 매크로를 사용하여 구조를 만드십시오.

Example 5.7. LC_NUMERIC_DEF

__LC_NUMERIC_DEF(lcnumeric_c, "C",".","","")	
__LC_NUMERIC_DEF(lcnumeric_iso8859_1, "ISO8859-1",	
                ".", ",", "\3")	
__LC_NUMERIC_DEF(lcnumeric_fr, "fr", ",", ".", "\3")	
__LC_INDEX_END(lcnumeric_dummy)	

void const *_get_lc_numeric(void const *null, char const *name) {
    return _findlocale(&lcnumeric_c_index, name);
}

void test_lc_numeric(void) {	
    double pi = 4*atan(1.);	
    char buf[20];	

    /* Test changing decimal point as we shift in and out of French	
     * numeric locale. */	

    EQS(setlocale(LC_NUMERIC, NULL), "C");         /* verify starting point */	
    snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");
    EQI(!setlocale(LC_NUMERIC, "ISO8859-1"), 0);   /* setlocale should work */	
    EQS(setlocale(LC_NUMERIC, NULL), "ISO8859-1");	
    snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");	
    EQI(!setlocale(LC_NUMERIC, "fr"), 0);          /* setlocale should work */	
    EQS(setlocale(LC_NUMERIC, NULL), "fr");	
    snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3,14159");	
    EQI(!setlocale(LC_NUMERIC, "C"), 0);           /* setlocale should work */	
    EQS(setlocale(LC_NUMERIC, NULL), "C");	
    snprintf(buf, sizeof(buf), "%g", pi); EQS(buf, "3.14159");	
}

오프셋 필드는 __lc_monetary_blk와 유사하게 해석됩니다.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0205GK
Non-Confidential