2012年6月24日日曜日

GL_CLAMP

Android版には定義がない!?

変わりに、GL_CLAMP_TO_EDGEはあった。。。

VC++ => gcc 備忘録(1)


デフォルトの警告レベルで、64bit整数値定数を扱う場合

修正前:0xFFFFFFFF00000000

VSだと警告なし
gccだと警告あり


修正前:0xFFFFFFFF00000000LL


最後に"LL"つけましょう


androidのAPIレベルが知りたくなったら

Android API Levels | Android Developers へ

2012年6月23日土曜日

プリプロセッサ展開後の出力


Visual C++

 1.  [プロパティ]-[構成プロパティ]-[C/C++]-[コマンドライン]画面に移動
 2. [追加オプション(D)]欄に「/C /P」を記入
   → /Cはコメント除去 /Pがプリプロセッサ出力の意味
 3. ビルド
 
 プリプロセッサ出力結果が[プロジェクト名].iファイルとして出力される


gcc
 
 gcc -E test.cpp > result.txt 

 結果が、result.txtに出力される

インライン展開メモ

・ デストラクタを持ったクラス(構造体)を値渡しで返す関数だとインライン展開されないことがある 
→ 無意味に空のデストラクタを定義するのはやめたほうがいいかも

・ inline よりも __forceinlineの方がやっぱり強力

2012年5月31日木曜日

ある構造体typeのメンバ変数memberのサイズを取得するマクロ


マクロ

#define MEMBER_SIZE_OF(type, member) sizeof(((type*)0)->member)

使用例

#define MEMBER_SIZE_OF(type, member) sizeof(((type*)0)->member

struct TestType
{
    int val;
};
Uint32 valSize = MEMBER_SIZE_OF(TestType,val); // valのサイズ取得



sizeof内の式は実際には評価されないので、NULL参照とかにはなりません。

2012年5月25日金曜日

UTF8+BOM付きのファイルを右クリック新規作成で作れるようにする

基本的に、andoroid、iPhone、Windowsでソースコードを共有したいので、
cppとhファイルの文字コードはUTF8にしています。


しかし、右クリック → [新規作成] → [テキスト ドキュメント]で作成した[新しいテキスト ドキュメント.txt]をテキストエディタで開くと、大体SJISで開かれてSJISで日本語書き込まれるでしょう。
そうなると、SJISとUTF8のソースコードが混在してしまうのでよろしくありません。


なので、今回はBOM付き+UTF8のhファイルを作れるようにします。



テンプレートファイルの作成


まず、新規作成の時にテンプレートとなる、UTF8 + BOM付きのファイルを用意します。

仮に「template.h」というファイル名をつけておきます。

このファイルを、以下のアドレスのフォルダにコピー

C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Templates

注) このフォルダは隠しフォルダなので、隠しフォルダの表示設定をしておいてください。( [コントロールパネル]-[フォルダーオプション]-[表示]で設定可能


レジスタファイルの設定

レジストリエディタを開きます。










1. スタートメニューを押す










2. regeeditと入力















3. レジストリエディタ起動




4. 左ペインから.hの項目を見つけて右クリック→[新規]→[キー]で名前をShellNewにする













5. ShellNewできた
















6. ShellNewを右クリック→[新規]→[文字列値]で名前をFileNameにする。FileNameをダブルクリックしてデータの値に「template.h」を入力












7 完了

まとめ














右クリック-[新規作成]-[C++ Header.h]が追加されていると思います。
[C++ Header.h]をクリックすると、template.hと同じ内容のhファイルができます。

これで無事右クリック新規作成で、UTF8+BOM付きのヘッダーファイルをすぐに作成できるようになりましたー。めでたしめでたし。