5: 2010-11-14 (日) 13:04:42 s10037 |
現: 2012-09-16 (日) 16:12:45 s10037 |
| 勘違いや間違い、キティーガイ沙汰な事を書いている可能性(大) | | 勘違いや間違い、キティーガイ沙汰な事を書いている可能性(大) |
| | | |
| + | **hoge [#j87ede54] |
| + | ***ほげほげ [#y7d03d0b] |
| | | |
| **環境変数の設定 [#y3c0d239] | | **環境変数の設定 [#y3c0d239] |
| 公式から落としてきたbulletのSDKを解凍すると、中にlibというフォルダがあるが中にライブラリファイルは入っていない。~ | | 公式から落としてきたbulletのSDKを解凍すると、中にlibというフォルダがあるが中にライブラリファイルは入っていない。~ |
| bullet-2.xx → msvc → 2008 (自分の場合) → lib → Debug~ | | bullet-2.xx → msvc → 2008 (自分の場合) → lib → Debug~ |
| + | となりにreleaseもあるんじゃね(たぶん)~ |
| + | あんまりいじってないから知らん~ |
| + | |
| を指定する~ | | を指定する~ |
| ~ | | ~ |
| ヘッダーファイルはbullet-2.xx → srcに入っている~ | | ヘッダーファイルはbullet-2.xx → srcに入っている~ |
| | | |
- | **win32API [#xd9a6814] | + | **アラインメント [#nc3a80e9] |
- | ***ウィンドウ生成 [#t07e989f] | + | ***構造体に関して [#pfeed50a] |
- | #include<windows.h>~ | + | たとえば~ |
- | LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);~ | + | typedef struct Hoge~ |
- | ATOM InitApp(HINSTANCE);~ | + | { |
- | BOOL InitInstance(HINSTANCE, int);~ | + | int int1; |
| + | double double1; |
| + | char char1; |
| + | double double2; |
| + | }Hoge; |
| | | |
- | LPCTSTR lpszClassName = TEXT("win01.cpp");~ | + | があったとして~ |
| + | サイズがいくつになるか~ |
| + | [obara@TandemMirror arainmento]$ ./a.out ~ |
| + | 24~ |
| + | stHoge 0xbfde0e2c ~ |
| + | int1 0xbfde0e2c ~ |
| + | double1 0xbfde0e30 ~ |
| + | char1 0xbfde0e38 ~ |
| + | double2 0xbfde0e3c ~ |
| + | ~ |
| + | ってな感じになりchar1とdouble2の間に隙間が出来た~ |
| + | これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた~ |
| + | CPUによってパディングのやり方が違うらしい~ |
| + | ~ |
| + | パディングには下手に触ってはいけないらしい~ |
| | | |
- | int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)~ | + | **malloc calloc realloc [#mae99393] |
| + | ***malloc [#o77c9597] |
| + | voidのポインタ返ってくる |
| + | いじょ |
| + | ***calloc [#g4e06f23] |
| + | voidのポインタが返ってくる |
| + | んで中のビットが全部0になっているらしい |
| + | いじょ |
| + | ***realloc [#ycfe0152] |
| + | void realloc(変更したいポインタ,どんくらいヒープするかのサイズ) |
| + | あんまり頻繁に使わない方がよさげ |
| | | |
- | {~ | + | 頻繁に巨大な領域をreallocで伸ばすと時間もかかりヒープの中につかえない巨大な空き領域がどんどんできてしまうらしい |
- | MSG msg;~ | + | |
- | BOOL bRet;~ | + | |
| | | |
- | if(!InitApp(hCurInst))~ | + | ***フラグメンテーション [#c0558cda] |
- | return FALSE;~ | + | てきとーにメモリの確保、開放を繰り返すとメモリが分断されていき使用できない細かい空きブロックができる |
- | if(!InitInstance(hCurInst, nCmdShow))~ | + | この現象をフラグメンテーションというらしい |
- | return FALSE;~ | + | |
- | while ((bRet = GetMessage(&msg, NULL, 0,0)) != 0)~ | + | (メモリはいっぱいあるぜ 気にするこたぁねぇw) |
- | {~ | + | |
- | if (bRet == -1)~ | + | **インクルード!ガーーーードッ!! [#ueddc470] |
- | {~ | + | ***再定義防止、無駄なプリコンパイルを減らす [#qad655c3] |
- | break;~ | + | ヘッダーに |
- | }~ | + | #ifndef OBARA_H |
- | else~ | + | #define OBARA_H |
- | {~ | + | |
- | TranslateMessage(&msg);~ | + | ~~ |
- | DispatchMessage(&msg);~ | + | |
- | }~ | + | #endif |
- | }~ | + | と最初と最後に書いて置くだけで再定義防止、とビルド時間を短縮できる |
- | return (int)msg.wParam;~ | + | |
| + | ifndef とは逆にifdefというのももある |
| + | ifndefとは逆で、ifdefは定義されていればendifまでを実行するらしい |
| + | |
| + | なにやらプリコンパイル時に必要のないコードはコンパイルしないようにしているようだから、ifdefとか書いても速度は変わらないらしい |
| + | |
| + | **bitを利用したフラグ管理 [#t8bfadcf] |
| + | ***unsignedを使う [#n460c455] |
| + | |
| + | まず |
| + | #define aFlag (1)~ |
| + | #define bFlag (1 << 2)~ |
| + | #define cFlag (1 << 3)~ |
| + | とフラグをどのように使うかマクロ定義や定数で定義しておくとよい~ |
| + | unsigned Flag = 0;//フラグを記録させる変数~ |
| + | unsignedを付けないと何かで右シフトした時、補数の1がシフトしてくるかもしれない~ |
| + | 必要な関数は3つ~ |
| + | セット、リセット、チェック~ |
| + | void set(unsigned f)~ |
| + | {~ |
| + | Flag |= f; |
| }~ | | }~ |
- | //ウィンドウクラス登録~ | + | void reset(unsigned f)~ |
- | ATOM InitApp(HINSTANCE hInst)~ | + | |
| {~ | | {~ |
- | WNDCLASSEX wc;~ | + | Flag &= ~f; |
- | wc.cbSize = sizeof(WNDCLASSEX);~ | + | |
- | wc.style = CS_HREDRAW | CS_VREDRAW;~ | + | |
- | wc.lpfnWndProc = WndProc;~ | + | |
- | wc.cbClsExtra = 0;~ | + | |
- | wc.cbWndExtra = 0;~ | + | |
- | wc.hInstance = hInst;~ | + | |
- | wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), | + | |
- | IMAGE_ICON, 0,0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
- | wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), | + | |
- | IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
- | wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);~ | + | |
- | wc.lpszMenuName = NULL;~ | + | |
- | wc.lpszClassName = lpszClassName;~ | + | |
- | wc.hIconSm = (HICON)LoadImage(~ | + | |
- | NULL,MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, | + | |
- | 0, 0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
- | | + | |
- | return (RegisterClassEx(&wc));~ | + | |
| }~ | | }~ |
- | //ウインドウの生成~ | + | //~はビット反転~ |
- | BOOL InitInstance(HINSTANCE hInst, int nCmdShow)~ | + | int check(unsigned f)~ |
| {~ | | {~ |
- | HWND hWnd;~ | + | return ((Flag & f) == f)? 1 : 0; |
- | | + | |
- | hWnd = CreateWindow(lpszClassName,~ | + | |
- | TEXT("クソゲー"),~ | + | |
- | WS_OVERLAPPEDWINDOW,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | NULL,~ | + | |
- | NULL,~ | + | |
- | hInst,~ | + | |
- | NULL);~ | + | |
- | if(!hWnd)~ | + | |
- | return FALSE;~ | + | |
- | ShowWindow(hWnd, nCmdShow);~ | + | |
- | UpdateWindow(hWnd);~ | + | |
- | return TRUE;~ | + | |
| }~ | | }~ |
- | | + | メモリの節約、可読性の向上~ |
- | //ウインドウプロシージャ~ | + | たとえば~ |
- | LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)~ | + | if(check(aFlag|bFlag|cFlag))~ |
| + | {~ |
| + | }else~ |
| {~ | | {~ |
- | switch (msg)~ | |
- | {~ | |
- | case WM_DESTROY:~ | |
- | PostQuitMessage(0);~ | |
- | break;~ | |
- | default:~ | |
- | return(DefWindowProc(hWnd, msg, wp, lp));~ | |
- | }~ | |
- | return 0;~ | |
| }~ | | }~ |
| + | |
| + | **ポインタとconst [#b0e8c424] |
| + | ***構造体 [#oba918ac] |
| + | 構造体~ |
| + | typedef struct dororo{~ |
| + | int hoge; |
| + | int tara; |
| + | int pong; |
| + | }~ |
| + | があるとして、 |
| + | const dororo *a = (dororo*)malloc(sizeof(dororo) * i);~ |
| + | という宣言をしてもメンバに値を代入できる~ |
| + | dororoはポインタなのでconstがついていたら a=nanntyara みたいにポインタを変更することはできないが、a->hoge=100のような変更はおk |
| + | 当然ではあるがconstは修飾した変数そのものにだけ有効である |
| + | |
| + | ***javaの場合 [#vf68af87] |
| + | javaの場合も同様~ |
| + | final hoge[5][5] = { |
| + | {1,2,3,4,5}, |
| + | {1,2,3,4,5}, |
| + | {1,2,3,4,5}, |
| + | {1,2,3,4,5}, |
| + | {1,2,3,4,5} |
| + | }; |
| + | ~ |
| + | とあるとするとhogeは変更できないが、hoge[]とhoge[][]は弄る事ができる。~ |
| + | |
| + | **共用体 [#uf334ffe] |
| + | ***? [#aa9d6bfa] |
| + | よくわからん~ |
| + | メモリの節約はできそうだ |
| + | |
| + | |
| + | **Lua [#qe15a255] |
| + | ***今日からLuaなるスクリプトの勉学に励もうと思いました [#y00c7189] |
| + | LuaさんはC言語に組み込む目的でRoberto IerusalimschyさんとLuiz Henrique de FigueiredoさんとWaldemar CelesさんがC言語に組み込む事を目的としたスクリプトとして開発したっぽい~ |
| + | ガベージコレクションはインクリメンタルGCでライセンスはMITらしい |
| + | |
| + | **luaの使い方 [#a101002d] |
| + | visualstudioのプロパティ→構成プロパティ→c/c++→全般→追加のインクルードディレクトリでluaのなかのincludeの追加 |
| + | 全般→リンカーで追加のライブラリディレクトリへluaのlibをを追加 |
| + | リンカー→入力の追加の依存ファイルへlua5.1.libを追加する |
| + | |
| + | するとvisualstudioでc++にluaを使えるようになる |
| + | |
| + | **C++ [#oea30fce] |
| + | *** [#b573a9a8] |
| + | |
| + | **クソゲ [#e2abf5a4] |
| + | ***フレーム [#p024da0e] |
| + | 毎回呼ぶようなクラスにstaticなフレームを数えるunsignedを持たせておけばいいんじゃないか |
| + | getしてフレームを数える |
| + | |
| + | **MSVS [#yf7acc71] |
| + | ***デバッグモード [#tc98a4c6] |
| + | _DEBUGが定義される |
| + | ifndefで囲っておけば、debugビルド時のみの処理を書ける |