AVR Libc Home Page | ![]() |
AVR Libc Development Pages | ||
Main Page | FAQ | Library Reference | Additional Documentation | Example Projects |
#include <stdlib.h>
このファイルはISO standardによって定められたいくつかの基本的なCのマクロや関数を宣言しています。AVR独特な拡張もいくつかあります。
構造体 | |
struct | div_t |
struct | ldiv_t |
標準でない(ISO C 互換でない)関数類 | |
#define | RANDOM_MAX 0x7FFFFFFF |
char * | itoa (int __val, char *__s, int __radix) |
char * | ltoa (long int __val, char *__s, int __radix) |
char * | utoa (unsigned int __val, char *__s, int __radix) |
char * | ultoa (unsigned long int __val, char *__s, int __radix) |
long | random (void) |
void | srandom (unsigned long __seed) |
long | random_r (unsigned long *ctx) |
倍精度実数用の変換関数 | |
これらの関数はデフォルトで組み込まれるライブラリlibc.a ,内には置かれていません。 数学的関数ライブラリlibm.a 内にあります。アプリケーションをリンクする際は
-lm オプションを付加する必要があります。 | |
#define | DTOSTR_ALWAYS_SIGN 0x01 |
#define | DTOSTR_PLUS_SIGN 0x02 |
#define | DTOSTR_UPPERCASE 0x04 |
char * | dtostre (double __val, char *__s, unsigned char __prec, unsigned char __flags) |
char * | dtostrf (double __val, char __width, char __prec, char *__s) |
定数定義 | |
#define | RAND_MAX 0x7FFF |
型定義 | |
typedef int(* | __compar_fn_t )(const void *, const void *) |
関数定義 | |
__inline__ void | abort (void) __ATTR_NORETURN__ |
int | abs (int __i) __ATTR_CONST__ |
long | labs (long __i) __ATTR_CONST__ |
void * | bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, int(*__compar)(const void *, const void *)) |
div_t | div (int __num, int __denom) __asm__("__divmodhi4") __ATTR_CONST__ |
ldiv_t | ldiv (long __num, long __denom) __asm__("__divmodsi4") __ATTR_CONST__ |
void | qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) |
long | strtol (const char *__nptr, char **__endptr, int __base) |
unsigned long | strtoul (const char *__nptr, char **__endptr, int __base) |
__inline__ long | atol (const char *__nptr) __ATTR_PURE__ |
__inline__ int | atoi (const char *__nptr) __ATTR_PURE__ |
void | exit (int __status) __ATTR_NORETURN__ |
void * | malloc (size_t __size) __ATTR_MALLOC__ |
void | free (void *__ptr) |
void * | calloc (size_t __nele, size_t __size) __ATTR_MALLOC__ |
void * | realloc (void *__ptr, size_t __size) __ATTR_MALLOC__ |
double | strtod (const char *__nptr, char **__endptr) |
double | atof (const char *__nptr) |
int | rand (void) |
void | srand (unsigned int __seed) |
int | rand_r (unsigned long *ctx) |
変数 | |
size_t | __malloc_margin |
char * | __malloc_heap_start |
char * | __malloc_heap_end |
|
dtostre()の |
|
dtostre()の |
|
dtostre()の |
|
rand() で生成される値の最大値 |
|
random() で生成される値の最大値 |
|
qsort() のための比較関数。便宜のために定義されています。 |
|
The abort()
|
|
abs() 関数は整数 i の絶対値を返します。 |
|
atof() 関数はポインタで示される文字列の先頭部分を整数値に変換します。 これは、以下と同等です。 strtod(nptr, (char **)NULL); |
|
文字列を整数値に変換します。 atoi() 関数はポインタで示される文字列の先頭部分を整数値に変換します。 これは、以下と同等です。 (int)strtol(nptr, (char **)NULL, 10); |
|
文字列を Long 整数値に変換します。 atol() 関数はポインタで示される文字列の先頭部分を整数値に変換します。 これは、以下と同等です。 strtol(nptr, (char **)NULL, 10); |
|
bsearch()関数は、ポインタbaseで示される要素を先頭とするnmemb 個の配列を検索する。配列要素のサイズは size で指定する。 配列の内容はあらかじめ比較関数による順序において昇順にソートされていなければなりません。比較ルーチンはキーオブジェクトと他の配列メンバの2つの引数を持ち、キーオブジェクトが一致/小さい/大きい と評価される場合に、0/負の値/正の値を返さねばなりません。 bsearch() 関数は配列内の合致したメンバへのポインタを返します。合致データがない場合はnull pointerを返します。合致するメンバが2つある場合は、どちらが合致するかは不定となります。 |
|
大きさ |
|
div() 関数は |
|
dtostre() 関数は倍精度実数値 val を、ASCII表現文字列に変換し、sが示す領域に保存します。呼び出し元はあらかじめsが示す領域に充分なメモリを確保する必要があります。 変換は flags値のDTOSTRE_ALWAYS_SIGN ビットがセットされている場合、正の数の頭にスペースが挿入されます。 flags値のDTOSTRE_PLUS_SIGN ビットがセットされている場合、正の数の頭にスペースではなく符号 (+)がつけられます。 dtostre() 関数は変換結果を保持する文字列 s の先頭アドレスを返します。 |
|
dtostrf() 関数は倍精度実数値 val を、ASCII表現文字列に変換し、sが示す領域に保存します。呼び出し元はあらかじめsが示す領域に充分なメモリを確保する必要があります。 変換は dtostrf() 関数は変換結果を保持する文字列 s の先頭アドレスを返します。 |
|
exit() 関数はアプリケーションを終了します。戻っていくべきOS環境は存在しないので、引数 status は無視され、コード実行は無限ループによる実行停止となります。 C++ では、実行停止の前にグローバルデストラクタ関数が呼ばれます。 |
|
free() 関数は ptr で示された割り当てられたメモリを解放し、再度割り当て可能にします。ptr がNULLなら、何も起こりません。 |
|
整数値を (radix)進数の文字列に変換する。 itoa() は整数値 val をASCII表現文字列に変換し、sが示す領域に保存します。呼び出し元はあらかじめsが示す領域に充分なメモリを確保する必要があります。
※以後'b','c',・・・36進数では'z'まで使われる。 radix が10で、値が負の数の場合は、負の数として表示され、マイナス符号が付けられます。 itoa()関数は結果が置かれるポインタ s がそのまま返されます。 |
|
The labs() 関数は long整数の絶対値を返します。 |
|
ldiv() 関数は |
|
long 整数を文字列に変換します。 関数 ltoa() は、long整数値 val をASCII表現文字列に変換し、sが示す領域に保存します。呼び出し元はあらかじめsが示す領域に充分なメモリを確保する必要があります。
※以後'b','c',・・・36進数では'z'まで使われる。 radix が10で、値が負の数の場合は、負の数として表示され、マイナス符号が付けられます。 ltoa() 関数は結果が置かれるポインタ s がそのまま返されます。 |
|
The malloc() 関数は malloc() は確保したメモリを 0 で初期化しない点にご注意ください。 ※calloc() はゼロフィルを行います。 malloc() の使い方の章も参照ください。 |
|
qsort()関数は単純ソート(partition-exchange sort) または クイックソートを行います。 qsort() 関数は、ポインタbaseで示される要素を先頭とするnmemb 個の配列をソートする。配列要素のサイズは size で指定する。配列 base の内容は比較関数による順序において昇順にソートされます。比較ルーチンはキーオブジェクトと他の配列メンバの2つの引数を持ち、キーオブジェクトが一致/小さい/大きい と評価される場合に、0/負の値/正の値を返さねばなりません。 |
|
rand() 関数は0〜 srand() 関数は引数 seed 値を指定しない場合、関数は自動的にseed値を1で設定します。 標準C言語に従って、これらの関数は int 引数で計算しています。しかし使用しているアルゴリズムは32bit計算のものを用いています。これは精密さに欠けます。フル32bit精度の
|
|
rand() のバリエーション。スタティックなライブラリの変数ではなく、ユーザーが供給する
|
|
random() 関数は0〜RAMDOM_MAX srandom() 関数は引数 seed を、rand() で生成される新しい疑似乱数列の種として設定します。この疑似乱数列は同じseed値を入れて srandom() をコールすると、同じ疑似乱数列を繰り返すことになります。 seed値が提供されなかった場合は、この関数は自動的にseedを1とします。 |
|
random() のバリエーション。スタティックなライブラリの変数ではなく、ユーザーが供給する
|
|
realloc() 関数は 返された領域のうち、新旧サイズのうち小さい方までの内容はrealloc()適用前のものと全く同一になります。これは新しい領域が割り付けられたときでも成立します(その場合はrealloc()がデータをコピーする)
新しいメモリが割り当てられなかった場合は、
realloc() はNULLを返し、 |
|
疑似乱数列生成の種を設定する。 rand() 参照。 |
|
疑似乱数列生成の種を設定する。 random() の項参照。 |
|
strtod() 関数は 文字列の期待される書式は、オプションとしての正符号
( ' 文字列内の先行するホワイトスペース文字はスキップされます。 strtod()関数は成功すれば変換された値を返します。
変換に失敗した場合は、値 0 が返され、endptrが指す位置にはnptr値(変換文字列の先頭アドレス)が保存されます。 正しい書式だが値がオーバーフローした場合は、+HUGE_VAL または -HUGE_VAL(値の正負による) が返されます。errnoには値ERANGEが保存されます。アンダーフロー時は、値 0 が返され、errnoには値ERANGEが保存されます。 FIXME: HUGE_VAL をどこかに定義して使わなければなりません。ビットパターンは0x7fffffffなんですけど、これはどんな値になるんでしょう? |
|
strtol() 関数は 文字列は(0個を含む)任意の数のホワイトスペース(
isspace() で判定される文字)で始まり、オプションとしての正符号
( ' そこから後の部分は基数指定に従いlong値に変換されます。基数に応じた桁文字以外の文字に出会った場合は変換を停止します。基数が10を越える場合は10の表記には大文字又は小文字の文字
strtol() 関数は変換がアンダーフロー又はオーバーフローしない場合は変換結果を返します。変換が行われなかった場合は0を返します。
アンダーフロー又はオーバーフローが起こった場合はerrnoに値
ERANGE がセットされ、関数は値 |
|
strtoul() 関数は 文字列は(0個を含む)任意の数のホワイトスペース(isspace()で判定される文字)で始まり、オプションとしての正符号
( ' そこから後の部分は基数指定に従いlong値に変換されます。基数に応じた桁文字以外の文字に出会った場合は変換を停止します。基数が10を越える場合は10の表記には大文字又は小文字の文字
strtoul() 関数は変換で得られた値を返します。結果が負の数の場合は結果がオーバーフローしない限りその負数(=絶対値)を返します。変換が行われなかった場合は0を返します。
オーバーフローが起こった場合はerrnoに値ERANGE がセットされ、strtoul() 関数は値 |
|
unsigned long整数を文字列に変換します。 関数 ultoa() は、 unsigned long 整数値 val を、ASCII表示形式に変換して s が指す領域に保存します。呼び出し元は充分な領域を s に確保する必要があります。
radix を基数として行われます。基数 radix は2(バイナリ)から36(36進数)までとれます。radix が10を越える場合は、数字'9' の次は'a'が使われます。
ultoa() 関数は ポインタ s をそのまま返します。 |
|
unsigned int型整数を文字列に変換します。 関数 utoa() はunsigned int 整数値 val を ASCII形式にして s が示す領域に保存します。呼び出し元は充分な領域を s に確保する必要があります。
radix を基数として行われます。基数 radix は2(バイナリ)から36(36進数)までとれます。radix が10を越える場合は、数字'9' の次は'a'が使われます。
utoa() 関数は ポインタ s をそのまま返します。 |
|
|
|