cppreference.com -> その他の標準 C 関数 -> 詳細

その他の標準 C 関数


abort

文法:

  #include <stdlib.h>
  void abort( void );

abort()は現在のプログラムを強制終了させる関数である。 実装依存であるが、実行失敗を表す値を返値として返す。

関連トピック:
exit(), atexit()

assert

文法:

  #include <assert.h>
  void assert( int 式 );

assert()マクロはエラーをテストするために使用される。 を評価してゼロになった場合には、assert()はその情報をSTDERRに書き出してプログラムを終了する。 もしNDEBUGというマクロが定義されていれば、assert()マクロはすべて無視される。

関連トピック:
abort()

atexit

文法:

  #include <stdlib.h>
  int atexit( void (*関数)(void) );

atexit()は関数 をプログラム終了時に呼び出すように登録する関数である。atexit()は多くの場合は32回まで、複数回呼ぶことができる。登録した関数は登録したのと逆順に呼び出される。atexit()の返値は成功した場合にはゼロ、そうでない場合にはそれ以外の値が返される。

関連トピック:
exit() and abort().

bsearch

文法:

  #include <stdlib.h>
  void *bsearch( const void *キー, const void *配列, size_t 要素数, size_t 大きさ, int (*比較関数)(const void *, const void *) );

bsearch()は配列[0] から配列[要素数-1] を二分検索し、キー と一致した要素のポインタを返す関数である。比較関数 は最初の引数が次の引数よりも小さかった場合には負の値を、等しかった場合にはゼロを、大きかった場合には正の値を返す関数でなければならない。配列 は昇順に並んでいる必要がある。返値はマッチした要素のポインタであり、見つからなかった場合にはNULLが返される。

関連トピック:
qsort()

exit

文法:

  #include <stdlib.h>
  void exit( int 終了コード );

exit()関数はプログラムを終了させる。終了コードは プログラムの返値として渡される。通常、プログラムの正常終了では0を返し、そうでない場合にはそれ以外の値を返す。

関連トピック:
atexit(), abort().

getenv

文法:

  #include <stdlib.h>
  char *getenv( const char *名前 );

getenv()は名前に関連づけられた環境変数の情報を返す関数である。名前に関連づけられた情報が存在しなければNULLが返される。

関連トピック:
system().

longjmp

文法:

  #include <setjmp.h>
  void longjmp( jmp_buf 環境バッファ, int 状態 );

longjmp()は最後にsetjmp()が呼ばれた位置のコードから実行を開始する。環境バッファsetjmp() を呼んだときにセットされる。状態setjmp()の返値になり、どこのlongjump()から飛んできたのかを判断するために使用することができる。状態 はゼロに設定してはならない。

関連トピック:
setjmp()

qsort

文法:
  #include <stdlib.h>
  void *qsort( void *配列, size_t 要素数, size_t 大きさ, int (*比較関数)(const void *, const void *) );

bsearch()は配列[0] から配列[要素数-1] をクイックソートする関数である。各要素の大きさは大きさ である。比較関数 は最初の引数が次の引数よりも小さかった場合には負の値を、等しかった場合にはゼロを、大きかった場合には正の値を返す関数でなければならない。qsort()は配列 を昇順に並びかえる。 関連トピック:
bsearch().


raise

文法:

  #include <signal.h>
  int raise( int シグナル );

raise()はシグナル をプログラムに送信する関数である。シグナルには以下の種類がある:

シグナル意味
SIGABRTプログラムを終了させるエラー
SIGFPE浮動小数点数エラー
SIGILL不正命令
SIGINTユーザがCTRL-Cを押した
SIGSEGV不正メモリアクセス
SIGTERMプログラム終了

成功時の返値はゼロ、失敗時はゼロ以外の値を返す。

関連トピック:
signal()

rand

文法:

  #include <stdlib.h>
  int rand( void );

rand()はゼロとRAND_MAXの間の乱数を返す関数である。サンプル:

    srand( time(NULL) );
    for( i = 0; i < 10; i++ )
      printf( "乱数 #%d: %d\n", i, rand() );
関連トピック:
srand()

setjmp

文法:

  #include <setjmp.h>
  int setjmp( jmp_buf 環境バッファ );

setjmp()関数はlongjmp()を実行するために、システムのスタック情報を環境バッファ に保存する関数である。最初にsetjmp()を実行するときには返値はゼロである。その後、longjmp()が呼ばれた場合には、longjmp()の2番目の引数がsetjmp()の返値として返される。longjmp()の説明も参照のこと。

関連トピック:
longjmp()

signal

文法:

  #include <signal.h>
  void ( *signal( int シグナル, void (* 関数) (int)) ) (int);

signal()は、プログラム内でシグナル を受信したときに呼び出される関数 を登録する関数である。関数 はカスタムシグナルハンドラで、以下のマクロがsignal.hに登録されている。

マクロ説明
SIG_DFLデフォルトシグナルハンドラ
SIG_IGNシグナルを無視する

signal()の返値は以前登録されていたシグナルハンドラである。エラー発生時はSIG_ERRになる。


srand

文法:

  #include <stdlib.h>
  void srand( unsigned 種 );

srand()はrand()が使用する乱数生成器の種を設定するのに使用する。

    srand( time(NULL) );
    for( i = 0; i < 10; i++ )
      printf( "乱数 #%d: %d\n", i, rand() );
関連トピック:
rand(), time().

system

文法:

  #include <stdlib.h>
  int system( const char *コマンド );

system()はコマンド をシステムコールとして実行する関数である。プログラムを実行してエラーがなかったときは返値がゼロになる。コマンド にNULLを指定した場合にはコマンドインタプリタが使用できるかどうかをテストすることができる。ゼロでない値が返ってきた場合には使用可能であり、そうでない場合にはゼロが返ってくる。

関連トピック:
exit(),

va_arg

文法:

  #include <stdarg.h>
  type va_arg( va_list 引数ポインタ, タイプ );
  void va_end( va_list 引数ポインタ );
  void va_start( va_list 引数ポインタ, 最後のパラメータ );

va_arg()は可変長引数を扱うためのマクロである。

  1. 最初にva_start()を呼び、va_listと最初の必須の引数を関数に渡す。この最初の引数は渡された引数の数を表している
  2. 次にva_listと引数の型を渡してva_arg()を呼ぶ。va_arg()の返値が現在のパラメータになる
  3. 引数の数だけ繰り返しva_arg()を呼ぶ
  4. 最後にva_listをva_end()に渡して後始末の処理を行う
サンプル:

    int sum( int, ... );
    int main( void ) {
    
      int answer = sum( 4, 4, 3, 2, 1 );
      printf( "答えは %d\n", answer );
    
      return( 0 );
    }
    
    int sum( int num, ... ) {
      int answer = 0;
      va_list argptr;
    
      va_start( argptr, num );
      for( ; num > 0; num-- )
        answer += va_arg( argptr, int );
    
      va_end( argptr );
      return( answer );
    }

このコードは4+3+2+1の答えとして10が表示される。