flagflag  
3: 2010-10-23 (Sat) 01:08:14 s10037 source Cur: 2012-09-16 (Sun) 16:12:45 s10037 source
Line 2: Line 2:
*C言語_オバラのwiki [#f02ac1c7] *C言語_オバラのwiki [#f02ac1c7]
勘違いや間違い、キティーガイ沙汰な事を書いている可能性(大) 勘違いや間違い、キティーガイ沙汰な事を書いている可能性(大)
 +
 +**hoge [#j87ede54]
 +***ほげほげ [#y7d03d0b]
 +
 +**環境変数の設定 [#y3c0d239]
 +***windows7の場合 [#c19612b4]
 +マイコンコンピュータ右クリックからシステムの詳細設定~
 +詳細設定の下に環境変数(N)...がある~
 +そこで設定~
 +
 +
 +**DXライブラリの設定 [#o1e8a6c6]
 +***Visual studio 2008の場合 [#q9c740aa]
 +
 +
 +
 +「文字セット」の項目を「マルチ バイト文字セットを使用する」に変更を「すべての構成」に適応させる~
 +~
 +
 +「構成」~
 +~
 +Release~
 +構成プロパティ → C/C++ → 「コード生成」~
 +のランタイム ライブラリの項目を「マルチスレッド(/MT)」に変更~
 +~
 +Debug~
 +
 +ランタイムライブラリの項目を「マルチスレッド デバッグ(/MTd)」に変更~
 +
 +
 +
**予約語 [#h0341d94] **予約語 [#h0341d94]
Line 39: Line 70:
sizeof   変数のサイズを取得~ sizeof   変数のサイズを取得~
-**win32API [#xd9a6814+**bullet [#i7eea11d
-***ウィンドウ生成 [#t07e989f+***bulletの導入 [#t3b20aa6
-#include<windows.h>+公式から落としてきたbulletのSDKを解凍すると、中にlibというフォルダがあるが中にライブラリファイルは入っていない。
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);+bullet-2.xx → msvc → 2008 (自分の場合) → lib → Debug
-ATOM InitApp(HINSTANCE);+となりにreleaseもあるんじゃね(たぶん)~ 
-BOOL InitInstance(HINSTANCE, int);~+あんまりいじってないから知らん~
-LPCTSTR lpszClassName = TEXT("win01.cpp");~+を指定する~ 
 +
 +ヘッダーファイルはbullet-2.xx → srcに入っている~
-int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)~+**アラインメント [#nc3a80e9] 
 +***構造体に関して [#pfeed50a] 
 +たとえば~ 
 +typedef struct Hoge~ 
 +
 +   int int1; 
 +   double double1; 
 +   char char1; 
 +   double double2; 
 +}Hoge;
-{+があったとして
-    MSG msg;+サイズがいくつになるか
-    BOOL bRet;~+[obara@TandemMirror arainmento]$ ./a.out ~ 
 +24~ 
 +stHoge  0xbfde0e2c ~ 
 +int1      0xbfde0e2c ~ 
 +double1  0xbfde0e30 ~ 
 +char1    0xbfde0e38 ~ 
 +double2  0xbfde0e3c ~ 
 +
 +ってな感じになりchar1とdouble2の間に隙間が出来た~ 
 +これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた~ 
 +CPUによってパディングのやり方が違うらしい~ 
 +
 +パディングには下手に触ってはいけないらしい~
-    if(!InitApp(hCurInst))~ +**malloc calloc realloc [#mae99393] 
-     return FALSE;~ +***malloc [#o77c9597] 
-    if(!InitInstance(hCurInst, nCmdShow))~ +voidのポインタ返ってくる 
-     return FALSE;+いじょ 
-    while ((bRet = GetMessage(&msg, NULL, 0,0)) != 0)~ +***calloc [#g4e06f23] 
-&nbsp;&nbsp;  {+voidのポインタが返ってくる 
-     if (bRet == -1)~ +んで中のビットが全部0になっているらしい 
-&nbsp;&nbsp;   {+いじょ 
-     break;+***realloc [#ycfe0152] 
- ;    }+void realloc(変更したいポインタ,どんくらいヒープするかのサイズ
-     else+あんまり頻繁に使わない方がよさげ 
-     {+ 
-     TranslateMessage(&msg);+頻繁に巨大な領域をreallocで伸ばすと時間もかかりヒープの中につかえない巨大な空き領域がどんどんできてしまうらしい 
-     DispatchMessage(&msg);+ 
-     }+***フラグメンテーション [#c0558cda] 
-  ;  }~ +てきとーにメモリの確保、開放を繰り返すとメモリが分断されていき使用できない細かい空きブロックができる 
-    return (int)msg.wParam;~+この現象をフラグメンテーションというらしい 
 + 
 +(メモリはいっぱいあるぜ 気にするこたぁねぇw) 
 + 
 +**インクルード!ガーーーードッ!! [#ueddc470] 
 +***再定義防止、無駄なプリコンパイルを減らす [#qad655c3] 
 +ヘッダーに 
 +#ifndef OBARA_H 
 +#define OBARA_H 
 + 
 +~
 + 
 +#endif 
 +と最初と最後に書いて置くだけで再定義防止、とビルド時間を短縮できる 
 + 
 +ifndef とは逆にifdefというのももある 
 +ifndefとは逆で、ifdefは定義されていればendifまでを実行するらしい 
 + 
 +なにやらプリコンパイル時に必要のないコードはコンパイルしないようにしているようだから、ifdefとか書いても速度は変わらないらしい 
 + 
 +**bitを利用したフラグ管理 [#t8bfadcf] 
 +***unsignedを使う [#n460c455] 
 + 
 +まず 
 +#define aFlag (1)~ 
 +#define bFlag (1 &lt;&lt; 2)
 +#define cFlag (1 &lt;&lt; 3)
 +とフラグをどのように使うかマクロ定義や定数で定義しておくとよい
 +unsigned Flag = 0;//フラグを記録させる変数
 +unsignedを付けないと何かで右シフトした時、補数の1がシフトしてくるかもしれない
 +必要な関数は3つ
 +セット、リセット、チェック
 +void set(unsigned f)~ 
 +{
 +    Flag |= f;
}~ }~
-//ウィンドウクラス登録~ +void reset(unsigned f)~
-ATOM InitApp(HINSTANCE hInst)~+
{~ {~
- &nbsp;  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("クソゲー"),~ +
-&nbsp;    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ビルド時のみの処理を書ける


Front page   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthMay 2024Next Month
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today

Who's Online

36 user(s) are online (4 user(s) are browsing xpwiki)

Members: 0
Guests: 36

more...

Access Counter

Today : 1300130013001300
Yesterday : 4345434543454345
Total : 2365844123658441236584412365844123658441236584412365844123658441
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com