10桁以上の整数の計算
2005-12-15-1 / カテゴリ: [programming][c] / [permlink]
1 | long long int |
1 2 3 4 | unsigned long long int foobar; : : printf ( "foobar: %llu\n" , foobar); |
long 1個じゃ足りない。
VC++6.0 定義位置と参照位置のキーバインド
2005-12-14-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
参照位置: カーソルを合わせて Shift - [F12]
次の参照位置: Ctrl - NUM+
前の参照位置: Ctrl - NUM-
一つ前に見た箇所への戻るは[2005-12-03-1]
しっかし、なんで数字キーONLYなんだ… 使いにくいよ…
ユーザ定義キーワード(VC6.0)
2005-12-12-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
実行ファイル msdev.exe のあるフォルダにキーワード定義ファイル usertype.dat を置くことで指定の字句に色を付けて表示させることができる。某 SDK の API リストをリファレンスから抜き出して C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\usertype.dat に1行1ワードでおいておけば色が変わった。
VisualStudio 2003 .Net だと、C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\usertype.dat
UML の作成ツール
2005-12-09-3 / カテゴリ: [win][programming][アプリ] / [permlink]
UML Modeling Tool
PC の jre が 1.4 以上詳しいバージョンがわからんかったので、とりあえず jre を消して、フルセットでいれてみた。
意外とサクサク動くんだな。
それ以前に、クラス設計なんてできんわけだが...
C++ 基礎の超基礎の最初の方の初歩
2005-12-09-2 / カテゴリ: [programming][c] / [permlink]
1 | Foo::bar; |
1 | Foo::Baz(); |
1 2 3 4 5 | class Foo { : Foo(); : }; |
1 2 3 4 5 | class Foo { : ~Foo(); : }; |
1 2 3 4 5 6 | class Foo { : char Baz(); int Baz( int x); : }; |
(C++)メンバ関数のポインタでエラー
2005-12-08-2 / カテゴリ: [programming][c] / [permlink]
1 2 3 4 5 | class Hoge { : int foobar(); : }; |
1 | *func = & this ->foobar; |
1 | error C2276: '&' : 仮想関数のアドレスを取ろうとしました。 |
このあたりによると、
staticメンバ関数か(C-likeな)グローバル関数でないと駄目です。なんだって。
理由は、「関数のアドレスが決定できない」です。
オブジェクトが生成されるまでメンバ関数はメモリ上のどこにあるかわからない(というかない?)ってことかな。
とりあえずクラスの定義で
1 2 3 4 | class Hoge { : static int foobar(); : |
実際の関数の定義は
1 2 3 4 | int Hoge::foobar() { : : } |
構造体のパディングをつめる
2005-12-08-1 / カテゴリ: [programming][c] / [permlink]
[2005-12-04-1]の続き
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | struct fromdata { unsigned char first; unsigned char second; unsigned char third; }; #pragma pack(push, 1) struct todata { unsigned first: 6; unsigned second: 6; unsigned third: 6; unsigned forth: 6; }; #pragma pack(pop) (以下略) |
1 2 | from: 3 to: 3 |
1 | #pragma pack(n) |
1 2 | #pragma pack(push, n) #pragma pack(pop) |
テストコード書いてみたが、エンディアン関係??でサクっとは base64 変換できねぇ...(@Intel pentium M)
構造体でビットフィールド
2005-12-04-1 / カテゴリ: [programming][c] / [permlink]
構造体のメンバにchar(1バイト)以下の単位で、ビット単位のメンバを持たせることができる。
1 2 3 4 5 | struct foo { int a: 1; // 1ビットの領域 int b: 3; // 3ビットの領域 int c: 2; // 2ビットの領域 }; |
このビットフィールドと共用体を併用すれば、ビット演算使わずに base64 エンコード/デコードできるかなーと思ったけど、sizeof(struct foo) は 4. パディングはしっかり入ってるのね...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | struct fromdata { unsigned char first; unsigned char second; unsigned char third; }; struct todata { unsigned first: 6; unsigned second: 6; unsigned third: 6; unsigned forth: 6; }; union base64 { struct fromdata from; struct todata to; }; int main() { printf ( "from: %d\n" , sizeof ( struct fromdata)); printf ( "to: %d\n" , sizeof ( struct todata)); return 0; } |
1 2 | from: 3 to: 4 |
VC6.0 で定義位置にジャンプした後、ジャンプ元に戻る
2005-12-03-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
1 | Ctrl-NUM* |
VC6.0 でブレークポイントの一括解除
2005-12-01-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
1 | Ctrl-Shift-F9 |
VC6.0 で対応する括弧へジャンプする
2005-11-30-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
1 | Ctrl-E |
1 | Ctrl-] |
Shift を同時に押下すればブロックが選択状態になるのでさらに見やすいかも。
dsw ファイルから起動した時、プロジェクト毎に Visual C++ を起動する(VC6.0)
2005-11-18-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
で、個人的には複数のプロジェクトを開いていてほしーんだけど。
調べたらいくらでもヒットしたんで、簡単に。
フォルダオプションのファイルの種類で、dsw ファイルの詳細設定の[MSDEVで開く(O)]を編集し、[DDEを使う(U)]のチェックをはずす。
で dsw ファイルをダブルクリックすれば、ファイル(プロジェクト)毎に Visual C++ が起動する。
可変長引数
2005-11-04-2 / カテゴリ: [programming][c] / [permlink]
各変数を自前で取り出して使う場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdarg.h> /* 引数を全部足して返す */ int sumall( int n, ...) { va_list ap; int total = n; int n_tmp = 0; va_start (ap, n); /* 最後の固定変数を指定し,最初の可変長引数をセットする */ while ((n_tmp = va_arg (ap, int )) != 0) { total += n_tmp; /* 型を指定することで引数を一つ取り出す. ap には次の引数がセット */ } va_end (ap); /* 後始末 */ return total; } |
また,型情報が必要なので,複数の型を扱うときは工夫が必要.
printf(3) 関係のラッパ
1 2 3 4 5 6 7 8 9 10 | #include <stdarg.h> void error( char *fmt, ...) { va_list ap; fprintf (stderr, "%s" , "Error! " ); va_start (ap, fmt); vfprintf (stderr, fmt, ap); va_end (ap); exit (1); } |
printfのフォーマットで桁数を変数指定
2005-11-04-1 / カテゴリ: [programming][perl][c] / [permlink]
1 | printf ( "%*d" , width, val); |
width を負の数にすれば,左寄せも可.
Perl でもまったくおんなじ
1 | printf ( "%0*d\n" , $width , $val ); |
static 変数 static 関数
2005-11-03-2 / カテゴリ: [programming][c] / [permlink]
(1) 外部変数・関数の static
static 関数および,static な外部変数(グローバル変数)は,「スコープはファイル」になって,ほかのファイルからは参照できなくする.
(2) 内部変数の static
関数内の内部変数に static がつくと,スコープは変化なく,「寿命がプログラム終了まで」になり,関数(ブロック)終了後も生き残る.よくある例は再帰処理内や関数呼出回数のカウント.
static 関数は,すべて(1)だぞ,と.
(1) については,Perl の my と同じだぞ,と.
memcpy memset
2005-09-23-2 / カテゴリ: [programming][c] / [permlink]
void* memcpy(void *dest, const void *src, size_t count);
src が指してるアドレスから count バイト分を dest へコピーする。
void* memset(void *dest, int c, size_t count);
dest が指してるアドレスから count バイト分を c で埋める。
いつのまにかゴッチャになってて、
1 | memset (p_data, 0, n_datasize); |
1 | memcpy (p_data, 0, n_datasize); |
しかも win 上だとエラーになるが、実際に動作させるデバイスではエラーにならんかったので気づかなかった。
_ モンブラン ボールペン 名入れ [The next time I learn a blog, I hope tha...]
_ バーバリー コート [I enjoy you because of your whole hard w...]
_ モンブラン アウトレット [楽天市場×ダイエットクラブ-「モンブラン ボールペン」�...]
_ prada sunglasses black friday [Iˇve learn several excellent stuff here....]
_ prada bag black friday [Hello there, just became aware of your b...]
_ ...
メモリのポインタを受け渡しする関数の設計
2005-09-23-1 / カテゴリ: [programming][c] / [permlink]
(1) 呼び出し元で初期化して(\0詰等)関数をよびだす
(2) 関数内で初期化して(\0詰め等)処理する
と
(1) 呼び出し時に有効なメモリのサイズも渡す
(2) サイズは固定で関数内で注意する
あたりに気をつける。
というか、共通の設計思想でコーディングする。
汎用的という点では、前者は (1) 後者も (1)
memcpy やら strncpy なんかのように。
と、今日教わった。
今の会社じゃ誰も教えてくれないこと…
_ ugg ケンジントン 手入れ [Cheap fake UGG boots flat on the young w...]
_ アグネスチャン 創価 [Cheap fake UGG boots flat around the you...]
_ ugg ブーツ 価格com [Cheap fake UGG boots flat for the young ...]
_ 楽天 ugg 偽物 [Genuine UGG boots price is fairly high, ...]
_ ugg australia ケンジントン [Genuine UGG boots price will be fairly h...]
_ ...
POST されるデータサイズの制限
2005-09-21-1 / カテゴリ: [programming][CGI][perl] / [permlink]
1 2 3 | $CGI ::POST_MAX = 1024 * 1024 * 5; # 5MB $obj_cgi = new CGI; : |
指定サイズを超えるデータが POST された場合は、cgi_error() にエラーメッセージがセットされるので、
1 2 3 4 | if ( $msg = $obj_cgi ->cgi_error) { print "Error: " , $msg , "\n" ; exit ; } |
_ ティンバーランド チャッカブーツ [{Marketplace|Market|Scene|Marketing|Abro...]
先頭の1文字を消す
2005-09-14-2 / カテゴリ: [programming][c] / [permlink]
1 2 | char string[] = "foobarbaz" ; memmove (string, string + 1, strlen (string)); |
つまり、"oobarbaz[NULL]" を f のところへコピーする。
memcpy と異なり、第一引数と第二引数が重なっていても正しく動く。
末尾を消すなら、消したいところで '\0' をいれればいい。
int の 0-9 を char の '0'-'9' に
2005-09-09-1 / カテゴリ: [programming][c] / [permlink]
1 | ch_number = int_number + '0' ; |
9(57/0x39)以降は、':', ';', '<', '=', '>', '?', ... と特に脈略はない(ように見える)
逆変換は '0' を引く。もしくは atoi で。
最終更新時間: 2013-05-02 16:12