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

△*2

math.h

acos

 

cosf

△*2

asin

 

sinf

△*2

atan

 

tanf

atan2

△*2

 

coshf

cos

△*2

 

sinhf

sin

△*2

 

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

△*1

 

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の項目を参照ください。

注 2.

三角関数演算器を利用するコードに置き換わる場合は×(ノンリエントラント)になります。
三角関数演算器に置き換わる条件は、コンパイルオプションの-tfuの項目を参照ください。

表 7.5

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

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

関数名

リエントラント

 

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

関数名

リエントラント

stddef.h

isblank

 

math.h

sqrtl

△*1

math.h

acosl

 

ceill

atanl

 

fabsl

△*1

atan2l

△*2

 

floorl

cosl

△*2

 

fmodl

sinl

△*2

 

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

×

注 1.

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

注 2.

三角関数演算器を利用するコードに置き換わる場合は×(ノンリエントラント)になります。
三角関数演算器に置き換わる条件は、コンパイルオプションの-tfuの項目を参照ください。