ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

C

ZeroMemory

C

前のソースからDirectX関連のincludeを削除したら、ZeroMemory関数が定義されていないというエラーが。 winbase.hで定義されていたので、Windows用の関数かと定義をたどっていたら、 winbase.h #define ZeroMemory RtlZeroMemory winnt.h #define RtlZeroMem…

setjmp,longjmp

日経ソフトウェアの9月号を読んでいたら、C言語に関する連載記事でsetjmpとlongjmpの解説が。 存在自体は知っていたけど詳しくは知らなかった。 #include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); setjmpで現在の場所を記憶し、longj</setjmp.h>…

atexit

C

SDLのサンプルソースを見ていたら見慣れない関数atexit()が。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/atexit.3.html exit()などで終了したときに呼ばれる関数を登録するもの。クラスのデストラクタみたいなものと考えればよいかな。 私の場合、…

シンタックスシュガー

C C++

昨日のなぜアロー演算子があるかという疑問を書いたが、それの回答が「ロベールのC++入門講座」に書いてあった。 p->aという文は(*p).aとアロー演算子を使わなくても書ける。が、p->aのほうが見やすいじゃんという話。 このような見やすくする構文をシンタッ…

確率の計算

あるアイテム4つから1つ選び出す。アイテムにはそれぞれ選びだされる確率が設定されている。 このような処理を行いたかったので、次のように書いてみた。 int select() { int odds[] = { 15, 30, 20, 35 }; // アイテムそれぞれの確立 int dice = rand()%100…

Duff's Device

C

ときどきの雑記帖 (null)編で見たプログラム。 void send(short *to, short *from, int count) { int n=(count+7)/8; switch(count%8){ case 0: do{ *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *f…

wchar_t

C C++

char型は1バイトの文字だが、wchar_t型は2バイトのワイド文字。文字列をUnicodeで扱うためのもの。 ワイド文字型で文字列を表現するには文字列の前にLを付ける。 wchar_t text[] = L"ABCDE"; char型の文字列操作の関数はwchar_t型ではどうなっているか、思い…

ceil

C

小数点以下を切り上げて丸める関数。 double ceil(double x); float ceilf(float x); long double ceill(long double x); たとえば、 #include <stdio.h> #include <math.h> int main() { float a = 1.2345f; int b; b = ceil( a ); printf("%f %d\n", a, b); } とすると、実</math.h></stdio.h>…

マップファイル

マップファイルとは作成したプログラムのメモリや関数のアドレスが書かれたもの(でいいのかな)。どの位置にどの関数があるかとか、どのくらいスタティック変数で領域が取られているかとか分かる。 VisualC++ではプロジェクトのプロパティに設定項目がある。…

alloca

C

スタックに一時的に領域を確保する。その領域は呼び出した関数を抜けるときに自動的に解放される。 void* p = alloca(size); 今回、この関数を初めて知った。 試してみたら、gccではコンパイルできたが、VisualC++やBorlandC++ではコンパイルできなかった。 …