1: 2010-09-30 (Thu) 11:30:25 s10037 |
Cur: 2012-09-16 (Sun) 16:12:45 s10037 |
| TITLE:C言語 | | TITLE:C言語 |
- | *ああああ [#f04659ea] | + | *C言語_オバラのwiki [#f02ac1c7] |
- | いいいい | + | 勘違いや間違い、キティーガイ沙汰な事を書いている可能性(大) |
- | **うううう [#x3207220] | + | |
- | ええええ | + | **hoge [#j87ede54] |
- | ***おおおお [#m1521625] | + | ***ほげほげ [#y7d03d0b] |
- | かかかかか | + | |
- | ききき~ | + | **環境変数の設定 [#y3c0d239] |
- | くくく | + | ***windows7の場合 [#c19612b4] |
| + | マイコンコンピュータ右クリックからシステムの詳細設定~ |
| + | 詳細設定の下に環境変数(N)...がある~ |
| + | そこで設定~ |
| + | |
| + | |
| + | **DXライブラリの設定 [#o1e8a6c6] |
| + | ***Visual studio 2008の場合 [#q9c740aa] |
| + | |
| + | |
| + | |
| + | 「文字セット」の項目を「マルチ バイト文字セットを使用する」に変更を「すべての構成」に適応させる~ |
| + | ~ |
| + | |
| + | 「構成」~ |
| + | ~ |
| + | Release~ |
| + | 構成プロパティ → C/C++ → 「コード生成」~ |
| + | のランタイム ライブラリの項目を「マルチスレッド(/MT)」に変更~ |
| + | ~ |
| + | Debug~ |
| + | |
| + | ランタイムライブラリの項目を「マルチスレッド デバッグ(/MTd)」に変更~ |
| + | |
| + | |
| + | |
| + | **予約語 [#h0341d94] |
| + | |
| + | |
| + | ***予約語 [#u5fb9dce] |
| + | void 型の無いことを宣言~ |
| + | char 1バイト・文字型~ |
| + | short 2バイト・単精度整数型~ |
| + | int 4バイト・整数型~ |
| + | long 4バイト・整数型~ |
| + | float 4バイト・単精度浮動小数点型~ |
| + | double 8バイト・倍精度浮動小数点型~ |
| + | auto 自動変数、関数を抜けるとデータは消去~ |
| + | static 静的変数、関数を抜けてもデータが残る~ |
| + | const 書き換え不可、宣言時に格納~ |
| + | signed 符号付変数を指定~ |
| + | unsigned 符号なし変数を指定~ |
| + | extern 異なるファイルから使用する際に宣言~ |
| + | volatile コンパイラに最適化させない~ |
| + | register レジスタに割り当て高速化、C++では使用できるが意味が無い~ |
| + | return 関数から抜ける、戻り値を指定できる~ |
| + | goto 指定ラベルへジャンプ~ |
| + | if 条件分岐~ |
| + | else if文の条件分岐~ |
| + | switch 条件分岐~ |
| + | case switchでの条件分岐~ |
| + | default switchでのcaseに当てはまらない条件~ |
| + | break ブロックから抜ける~ |
| + | for ループ文(初期化;終了条件;変数更新)~ |
| + | while ループ文(終了条件)~ |
| + | do do-while文で使用する、処理の開始~ |
| + | continue ループ文の先頭に戻る~ |
| + | typedef 型に別名をつける、意味は変わらず~ |
| + | struct 構造体、変数をまとめて宣言するユーザー定義型~ |
| + | enum 列挙型、整数の割り当て~ |
| + | union 共用体、変数をまとめて宣言できるが、アドレスは共通~ |
| + | sizeof 変数のサイズを取得~ |
| + | |
| + | **bullet [#i7eea11d] |
| + | ***bulletの導入 [#t3b20aa6] |
| + | 公式から落としてきたbulletのSDKを解凍すると、中にlibというフォルダがあるが中にライブラリファイルは入っていない。~ |
| + | bullet-2.xx → msvc → 2008 (自分の場合) → lib → Debug~ |
| + | となりにreleaseもあるんじゃね(たぶん)~ |
| + | あんまりいじってないから知らん~ |
| + | |
| + | を指定する~ |
| + | ~ |
| + | ヘッダーファイルはbullet-2.xx → srcに入っている~ |
| + | |
| + | **アラインメント [#nc3a80e9] |
| + | ***構造体に関して [#pfeed50a] |
| + | たとえば~ |
| + | typedef struct Hoge~ |
| + | { |
| + | int int1; |
| + | double double1; |
| + | char char1; |
| + | double double2; |
| + | }Hoge; |
| + | |
| + | があったとして~ |
| + | サイズがいくつになるか~ |
| + | [obara@TandemMirror arainmento]$ ./a.out ~ |
| + | 24~ |
| + | stHoge 0xbfde0e2c ~ |
| + | int1 0xbfde0e2c ~ |
| + | double1 0xbfde0e30 ~ |
| + | char1 0xbfde0e38 ~ |
| + | double2 0xbfde0e3c ~ |
| + | ~ |
| + | ってな感じになりchar1とdouble2の間に隙間が出来た~ |
| + | これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた~ |
| + | CPUによってパディングのやり方が違うらしい~ |
| + | ~ |
| + | パディングには下手に触ってはいけないらしい~ |
| + | |
| + | **malloc calloc realloc [#mae99393] |
| + | ***malloc [#o77c9597] |
| + | voidのポインタ返ってくる |
| + | いじょ |
| + | ***calloc [#g4e06f23] |
| + | voidのポインタが返ってくる |
| + | んで中のビットが全部0になっているらしい |
| + | いじょ |
| + | ***realloc [#ycfe0152] |
| + | void realloc(変更したいポインタ,どんくらいヒープするかのサイズ) |
| + | あんまり頻繁に使わない方がよさげ |
| + | |
| + | 頻繁に巨大な領域をreallocで伸ばすと時間もかかりヒープの中につかえない巨大な空き領域がどんどんできてしまうらしい |
| + | |
| + | ***フラグメンテーション [#c0558cda] |
| + | てきとーにメモリの確保、開放を繰り返すとメモリが分断されていき使用できない細かい空きブロックができる |
| + | この現象をフラグメンテーションというらしい |
| + | |
| + | (メモリはいっぱいあるぜ 気にするこたぁねぇ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 << 2)~ |
| + | #define cFlag (1 << 3)~ |
| + | とフラグをどのように使うかマクロ定義や定数で定義しておくとよい~ |
| + | unsigned Flag = 0;//フラグを記録させる変数~ |
| + | unsignedを付けないと何かで右シフトした時、補数の1がシフトしてくるかもしれない~ |
| + | 必要な関数は3つ~ |
| + | セット、リセット、チェック~ |
| + | void set(unsigned f)~ |
| + | {~ |
| + | Flag |= f; |
| + | }~ |
| + | void reset(unsigned f)~ |
| + | {~ |
| + | Flag &= ~f; |
| + | }~ |
| + | //~はビット反転~ |
| + | int check(unsigned f)~ |
| + | {~ |
| + | return ((Flag & f) == f)? 1 : 0; |
| + | }~ |
| + | メモリの節約、可読性の向上~ |
| + | たとえば~ |
| + | if(check(aFlag|bFlag|cFlag))~ |
| + | {~ |
| + | }else~ |
| + | {~ |
| + | }~ |
| + | |
| + | **ポインタと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ビルド時のみの処理を書ける |