目次 - SDL 3.0 API(機能別) - 標準ライブラリ - SDL_copyp

SDL_copyp

基本的な型チェックを行いオブジェクト同士のメモリコピーするマクロ

ヘッダ

SDL3/SDL_stdinc.h

構文

#define SDL_copyp(dst, src)                                                                 \
    { SDL_COMPILE_TIME_ASSERT(SDL_copyp, sizeof (*(dst)) == sizeof (*(src))); }             \
    SDL_memcpy((dst), (src), sizeof(*(src)))

引数

dstコピー先のオブジェクトへのポインタ. NULL不可
srcコピー元のオブジェクトへのポインタ. NULL不可

詳細

SDL_memcpySDL_memmoveはコピー元と先を考慮しないため, バグを引き起こす可能性がある. このマクロは, コピー元とコピー先の両方のオブジェクトへのポインタの型が同じサイズであることを確認することで大半のバグを避けることを目的としている. コピーしてもオーバーフローしないため, 両方のオブジェクトが同じ型であることはチェックしない.

サイズのチェックはコンパイル時に行われ, コピーするオブジェクトのサイズが異なる場合はコンパイラがエラーを発する.

このマクロは配列ではなく単一のオブジェクトのコピーを想定している.

このマクロは引数を2回評価しているように見えるが, 行っているのはsizeofの部分であり, コードの生成は行われず副作用も生じない.

スレッドセーフ

このマクロはどのスレッドからも安全に呼べる.

バージョン

SDL 3.2.0以降

SDL Wikiへのリンク

SDL_copyp - SDL Wiki