5.14.1. ISO C 라이브러리 구현 정의

ISO 사양은 일부 세부사항을 구현자의 선택하도록 남겨두지만 구현 선택을 기록으로 남겨야 합니다. 이 단원에서는 ARM 라이브러리 구현에 대해 설명합니다.

일반 ARM C 라이브러리의 경우:

다음 함수가 EOF(–1) ~ 255 사이의 문자 값에 대해 테스트합니다.

ISO C 변형은 라이브러리 명명 규칙에 나열됩니다.

수학 함수

Table 5.18은 범위 밖의 인수가 제공되었을 때 수학 함수가 응답하는 방식을 보여줍니다.

Table 5.18. 수학 함수

함수조건반환 값오류 번호
acos(x)abs(x) > 1QNaNEDOM
asin(x)abs(x) > 1QNaNEDOM
atan2(x,y)x =0, y = 0QNaNEDOM
atan2(x,y)x = Inf, y = InfQNaNEDOM
cos(x)x=InfQNaNEDOM
cosh(x)Overflow+InfERANGE
exp(x)오버플로+InfERANGE
exp(x)언더플로+0ERANGE
fmod(x,y)x=InfQNaNEDOM
fmod(x,y)y = 0QNaNEDOM
log(x)x < 0QNaNEDOM
log(x)x = 0-InfEDOM
log10(x)x < 0QNaNEDOM
log10(x)x = 0-InfEDOM
pow(x,y)오버플로+InfERANGE
pow(x,y)언더플로0ERANGE
pow(x,y)x=0 or x=Inf, y=0+1EDOM
pow(x,y)x=+0, y<0-InfEDOM
pow(x,y)x=-0, y<0 및 y 정수-InfEDOM
pow(x,y)x= -0, y<0 및 y 비정수QNaNEDOM
pow(x,y)x<0, y 비정수QNaNEDOM
pow(x,y)x=1, y=InfQNaNEDOM
sqrt(x)x < 0QNaNEDOM
sin(x)x=InfQNaNEDOM
sinh(x)오버플로+InfERANGE
tan(x)x=InfQNaNEDOM
atan(x)SNaNSNaN해당 사항 없음
ceil(x)SNaNSNaN해당 사항 없음
floor(x)SNaNSNaN해당 사항 없음
frexp(x)SNaNSNaN해당 사항 없음
ldexp(x)SNaNSNaN해당 사항 없음
modf(x)SNaNSNaN해당 사항 없음
tanh(x)SNaNSNaN해당 사항 없음

HUGE_VALInf의 별칭입니다. 오류 번호는 errno 변수를 참조하십시오. Table 5.18에 표시된 사례가 아닌 경우 모든 함수는 QNaN이 전달되었을 때는 QNaN을 반환하고 SNaN이 전달되었을 때는 잘못된 연산 예외를 throw합니다.

신호 함수

Table 5.19signal() 함수가 지원하는 신호를 보여줍니다.

Table 5.19. 신호 함수

신호번호설명추가 인수
SIGABRT1이 신호는 abort() 또는 assert()가 응용 프로그램에 의해 호출된 경우에만 사용됩니다.해당 사항 없음
SIGFPE2모든 산술 예외, 예를 들어 0으로 나누기를 신호하는 데 사용됩니다. 하드 및 소프트 부동 소수점과 정수 나누기에서 사용됩니다.{FE_EX_INEXACT, FE_EX_UNDERFLOW, FE_EX_OVERFLOW, FE_EX_DIVBYZERO, FE_EX_INVALID, DIVBYZERO}의 비트 세트
SIGILL3잘못된 명령어해당 사항 없음
SIGINT4사용자의 주의 요청해당 사항 없음
SIGSEGV5잘못된 메모리 액세스해당 사항 없음
SIGTERM6종료 요청해당 사항 없음
SIGSTAK7스택 오버플로가 감지되었습니다.해당 사항 없음
SIGRTRED8런타임 라이브러리 입력/출력 스트림에서 실패한 리디렉션표준 스트림을 리디렉션하기 위해 다시 열리는 파일 또는 장치의 이름
SIGRTMEM9초기화 동안 또는 손상 후 힙 공간 부족실패한 요청의 크기
SIGUSR110사용자 정의됩니다.사용자 정의됩니다.
SIGUSR211사용자 정의됩니다.사용자 정의됩니다.
SIGPVFN12순수 가상 함수가 C++에서 호출되었습니다.-
SIGCPPL13C++의 예외-
SIGOUTOFHEAP14힙 공간이 부족할 경우 C++ 함수 ::operator new가 반환합니다.실패한 요청의 크기
예약되어 있음 15-31예약되어 있음예약되어 있음
기타 > 31사용자 정의됩니다.사용자 정의됩니다.

SIGUSR2보다 큰 신호 번호가 __raise()를 통해 전달되고 기본 신호 처리기가 이를 캐치할 수 있으나, signal()을 사용하여 등록된 처리기는 캐치할 수 없습니다.

SIGUSR2보다 큰 신호 번호에 대해 처리기를 등록하려 할 때 signal()이 오류 코드를 반환합니다.

모든 인식된 신호의 기본 처리는 진단 메시지를 표시하고 exit()를 호출하는 것입니다. 이 기본 동작은 프로그램 시작 시부터 사용자가 변경하기까지 적용됩니다.

Caution

부동 소수점 처리에 대한 IEEE 754 표준에 따르면 예외에 대한 기본 조치는 트랩 없이 진행하는 것입니다. 부동 소수점 처리시 발생한 예외는 기본적으로 SIGFPE를 생성하지 않습니다. fenv.h의 함수 및 정의를 조정하여 부동 소수점 오류 처리를 수정할 수 있습니다. 부동 소수점 처리에 대한 자세한 내용은 오류 신호, 오류 처리 및 프로그램 종료 조정Chapter 6 부동 소수점 지원을 참조하십시오.

Table 5.19의 모든 신호와 관련하여, 처리기가 함수를 가리킬 경우 신호가 발생하면 signal(sig, SIG_DFL)에 상응하는 함수가 처리기에 대한 호출 전에 실행됩니다.

SIGILL 신호를 signal() 함수가 지정한 처리기에서 수신하면 기본 처리가 리셋됩니다.

입력/출력 특성

일반 ARM C 라이브러리에는 다음과 같은 입력/출력 특성이 있습니다.

  • 텍스트 스트림의 마지막 라인에서는 마지막 새 라인 문자가 없어도 됩니다.

  • 텍스트 스트림의 새 라인 문자 바로 앞에 쓴 공백은 읽어들일 때 나타납니다.

  • null 문자가 이진 출력 스트림에 추가되지 않습니다.

  • 추가 모드 스트림의 파일 위치 지시자는 처음에 파일 끝에 배치됩니다.

  • 텍스트 스트림에 쓰면 관련 파일이 쓰기가 발생한 위치를 벗어날 때 잘립니다 (파일의 장치 범주의 동작인 경우).

  • 파일 버퍼링의 특성은 ISO C 표준의 4.9.3 섹션을 준수합니다. 세미호스팅이 사용되면 열린 파일의 최대 수가 사용할 수 있는 타겟 메모리의 제한을 받습니다.

  • 0 길이 파일, 즉 출력 스트림에서 아무런 문자도 쓴 적 없는 파일이 존재합니다.

  • 파일은 읽기용으로 여러 번 열 수 있지만 쓰기 또는 업데이트용으로는 한 번만 열수 있습니다. 단일 파일을 하나의 스트림에서는 읽기용으로, 다른 스트림에서는 쓰기 또는 업데이트용으로 동시에 열 수 없습니다.

  • 지역 시간대 및 일광절약시간제는 구현되지 않습니다. 반환된 값은 이 정보를 사용할 수 없음을 나타냅니다. 예를 들어, gmtime() 함수는 항상 NULL을 반환합니다.

  • exit()가 반환한 상태는 전달된 값과 동일합니다. EXIT_SUCCESSEXIT_FAILURE의 정의에 대해서는 stdlib.h 헤더 파일을 참조하십시오. 그러나 세미호스팅 SVC는 상태를 다시 실행 환경으로 전달하지 않습니다.

  • strerror() 함수가 반환한 오류 메시지는 perror() 함수가 제공한 오류 메시지와 동일합니다.

  • 요청된 영역의 크기가 0이면 calloc()realloc()NULL을 반환합니다.

  • 요청된 영역의 크기가 0이면 malloc()가 0 크기 블록에 대한 포인터를 반환합니다.

  • abort()는 모든 열린 파일을 닫고 모든 임시 파일을 삭제합니다.

  • fprintf()%p 인수를 마치 정밀도 8이 지정된 것처럼 소문자 16진수 포맷으로 표시합니다. 변형 형식(%#p)을 사용하면 숫자가 @ 문자 뒤에 옵니다.

  • fscanf()%p 인수를 %x 인수와 정확히 동일하게 처리합니다.

  • fscanf()%...[...] 인수의 "-" 문자를 리터럴 문자로 처리합니다.

  • ftell()fgetpos()는 실패 시 errnoEDOM의 값으로 설정합니다.

  • perror()Table 5.20에 표시된 메시지를 생성합니다.

Table 5.20. perror() 메시지

오류메시지
0No error (errno = 0)
EDOM

EDOM - function argument out of range

ERANGE

ERANGE - function result not representable

ESIGNUM

ESIGNUM - illegal signal number

기타

Unknown error

다음 특성이 ISO 준수 구현에서 지정되어야 합니다(ARM C 라이브러리에서는 지정되지 않음).

  • 파일 이름의 유효성

  • remove()가 열린 파일을 제거할 수 있는지 여부

  • 새 이름이 이미 존재할 경우 rename() 함수 호출의 결과

  • getenv() 호출의 결과(기본값은 NULL 반환이며 사용 가능한 값이 없음)

  • system() 호출의 결과

  • clock()이 반환한 값

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