7.3 リエントラント性

標準ライブラリ構築ツールで-reent オプションを指定して作成したライブラリは、rand、srand関数およびEC++ライブラリを除いてすべてリエントラントに実行できます。

-reent オプションを指定していない場合について、表 7.4および表 7.5にリエントラントライブラリ一覧を示します。表中、△で示した関数は、errno変数を設定しますので、プログラム中でerrnoを参照していなければリエントラントに実行できます。

 

リエントラント欄 ◯:リエントラント ×:ノンリエントラント △:errnoを設定

表 7.4

C(C89)リエントラントライブラリ関数一覧

標準インクルード
ファイル

関数名

リエントラント

 

標準インクルード
ファイル

関数名

リエントラント

stddef.h

offsetof

 

math.h

frexp

assert.h

assert

×

 

ldexp

ctype.h

isalnum

 

log

isalpha

 

log10

iscntrl

 

modf

isdigit

 

pow

isgraph

 

sqrt

△*1

islower

 

ceil

isprint

 

fabs

△*1

ispunct

 

floor

isspace

 

fmod

isupper

 

mathf.h

acosf

isxdigit

 

asinf

tolower

 

atanf

toupper

 

atan2f

math.h

acos

 

cosf

asin

 

sinf

atan

 

tanf

atan2

 

coshf

cos

 

sinhf

sin

 

tanhf

tan

 

expf

cosh

 

frexpf

sinh

 

ldexpf

tanh

 

logf

exp

 

log10f

mathf.h

modff

 

stdio.h

gets

×

powf

 

putc

×

sqrtf

△*1

 

putchar

×

ceilf

 

puts

×

fabsf

△*1

 

ungetc

×

floorf

 

fread

×

fmodf

 

fwrite

×

setjmp.h

setjmp

 

fseek

×

longjmp

 

ftell

×

stdarg.h

va_start

 

rewind

×

va_arg

 

clearerr

×

va_end

 

feof

×

stdio.h

fclose

×

 

ferror

×

fflush

×

 

perror

×

fopen

×

 

stdlib.h

atof

freopen

×

 

atoi

setbuf

×

 

atol

setvbuf

×

 

atoll

fprintf

×

 

strtod

fscanf

×

 

strtol

printf

×

 

strtoul

scanf

×

 

strtoll

sprintf

×

 

strtoull

sscanf

 

rand

×

vfprintf

×

 

srand

×

vprintf

×

 

calloc

×

vsprintf

×

 

free

×

fgetc

×

 

malloc

×

fgets

×

 

realloc

×

fputc

×

 

bsearch

fputs

×

 

qsort

getc

×

 

abs

getchar

×

 

div

stdlib.h

labs

 

string.h

memchr

llabs

 

strchr

ldiv

 

strcspn

lldiv

 

strpbrk

string.h

memcpy

 

strrchr

strcpy

 

strspn

strncpy

 

strstr

strcat

 

strtok

×

strncat

 

memset

memcmp

 

strerror

strcmp

 

strlen

strncmp

 

memmove

注 1.

関数呼び出しが命令に置き換わる場合は errno変数を更新しないため ○ になります。
命令に置き換わる条件は、コンパイルオプションの-libraryの項目を参照ください。

表 7.5

C99リエントラントライブラリ関数一覧

標準インクルード
ファイル

関数名

リエントラント

 

標準インクルード
ファイル

関数名

リエントラント

stddef.h

isblank

 

math.h

sqrtl

math.h

acosl

 

ceill

atanl

 

fabsl

atan2l

 

floorl

cosl

 

fmodl

sinl

 

fpclassify

tanl

 

isfinite

coshl

 

isinf

sinhl

 

isnan

tanhl

 

isnormal

expl

 

signbit

frexpl

 

isgreater

ldexpl

 

isgreaterequal

logl

 

isless

log10l

 

islessequal

modfl

 

islessgreater

powl

 

isunordered

math.h

acosh

×

 

math.h

cbrt

acoshf

×

 

cbrtf

acoshl

×

 

cbrtl

asinh

×

 

hypot

×

asinhf

×

 

hypotf

×

asinhl

×

 

hypotl

×

atanh

×

 

erf

×

atanhf

×

 

erff

×

atanhl

×

 

erfl

×

exp2

×

 

erfc

×

exp2f

×

 

erfcf

×

exp2l

×

 

erfcl

×

expm1

 

lgamma

×

expm1f

 

lgammaf

×

expm1l

 

lgammal

×

ilogb

 

tgamma

×

ilogbf

 

tgammaf

×

ilogbl

 

tgammal

×

log1p

×

 

nearbyint

log1pf

×

 

nearbyintf

log1pl

×

 

nearbyintl

log2

×

 

rint

×

log2f

×

 

rintf

×

log2l

×

 

rintl

×

logb

×

 

lrint

×

logbf

×

 

lrintf

×

logbl

×

 

lrintl

×

scalbn

×

 

llrint

×

scalbnf

×

 

llrintf

×

scalbnl

×

 

llrintl

×

scalbln

×

 

round

scalblnf

×

 

roundf

scalblnl

×

 

roundl

math.h

lround

×

 

math.h

fmin

lroundf

×

 

fminf

lroundl

×

 

fminl

llround

×

 

fma

×

llroundf

×

 

fmaf

×

llroundl

×

 

fmal

×

trunc

 

stdarg.h

va_copy

truncf

 

stdio.h

snprintf

×

truncl

 

vsnprintf

×

remainder

×

 

vfscanf

×

remainderf

×

 

vscanf

×

remainderl

×

 

vsscanf

×

remquo

×

 

complex.h

cacos

×

remquof

×

 

cacosf

×

remquol

×

 

cacosl

×

copysign

 

casin

×

copysignf

 

casinf

×

copysignl

 

casinl

×

nan

 

catan

×

nanf

 

catanf

×

nanl

 

catanl

×

nextafter

×

 

ccos

×

nextafterf

×

 

ccosf

×

nextafterl

×

 

ccosl

×

nexttoward

×

 

csin

×

nexttowardf

×

 

csinf

×

nexttowardl

×

 

csinl

×

fdim

 

ctan

fdimf

 

ctanf

fdiml

 

ctanl

fmax

 

cacosh

×

fmaxf

 

cacoshf

×

fmaxl

 

cacoshl

×

complex.h

casinh

×

 

complex.h

cimag

casinhf

×

 

cimagf

casinhl

×

 

cimagl

catanh

×

 

conj

catanhf

×

 

conjf

catanhl

×

 

conjl

ccosh

×

 

cproj

ccoshf

×

 

cprojf

ccoshl

×

 

cprojl

csinh

×

 

creal

csinhf

×

 

crealf

csinhl

×

 

creall

ctanh

 

fenv.h

feclearexcept

×

ctanhf

 

fegetexceptflag

ctanhl

 

feraiseexcept

×

cexp

×

 

fesetexceptflag

×

cexpf

×

 

fetestexcept

cexpl

×

 

fegetround

clog

×

 

fesetround

×

clogf

×

 

fegetenv

clogl

×

 

feholdexcept

×

cabs

×

 

fesetenv

×

cabsf

×

 

feupdateenv

×

cabsl

×

 

inttypes.h

imaxabs

cpow

×

 

imaxdiv

cpowf

 

strtoimax

cpowl

 

strtoumax

csqrt

 

wcstoimax

csqrtf

 

wcstoumax

csqrtl

 

wchar.h

fwprintf

×

carg

 

vfwprintf

×

cargf

 

swprintf

×

cargl

 

vswprintf

×

wchar.h

wprintf

×

 

wchar.h

wcstoul

vwprintf

×

 

wcstoull

fwscanf

×

 

wcscpy

vfwscanf

×

 

wcsncpy

swscanf

×

 

wmemcpy

vswscanf

×

 

wmemmove

wscanf

×

 

wcscat

vwscanf

×

 

wcsncat

fgetwc

×

 

wcscmp

fgetws

×

 

wcsncmp

fputwc

×

 

wmemcmp

fputws

×

 

wcschr

fwide

×

 

wcscspn

getwc

×

 

wcspbrk

getwchar

×

 

wcsrchr

putwc

×

 

wcsspn

putwchar

×

 

wcsstr

ungetwc

×

 

wcstok

wcstod

×

 

wmemchr

wcstof

×

 

wcslen

wcstold

×

 

wmemset

wcstol

 

mbsinit

wcstoll

 

mbrlen

×