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

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

 

ungetc

×

fabsl

 

fread

×

floorf

 

fwrite

×

fmodf

 

fseek

×

setjmp.h

setjmp

 

ftell

×

longjmp

 

rewind

×

stdarg.h

va_start

 

clearerr

×

va_arg

 

feof

×

va_end

 

ferror

×

stdio.h

fclose

×

 

perror

×

fflush

×

 

stdlib.h

atof

fopen

×

 

atoi

freopen

×

 

atol

setbuf

×

 

atoll

setvbuf

×

 

strtod

fprintf

×

 

strtol

fscanf

×

 

strtoul

printf

×

 

strtoll

scanf

×

 

strtoull

sprintf

×

 

rand

×

sscanf

 

srand

×

vfprintf

×

 

calloc

×

vprintf

×

 

free

×

vsprintf

×

 

malloc

×

fgetc

×

 

realloc

×

fgets

×

 

bsearch

fputc

×

 

qsort

fputs

×

 

abs

getc

×

 

div

getchar

×

 

labs

stdlib.h

llabs

 

string.h

strchr

ldiv

 

strcspn

lldiv

 

strpbrk

string.h

memcpy

 

strrchr

strcpy

 

strspn

strncpy

 

strstr

strcat

 

strtok

×

strncat

 

memset

memcmp

 

strerror

strcmp

 

strlen

strncmp

 

memmove

memchr

 

注 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

×