CPP

2038年対策

CTime クラスと CTimeSpan クラスは、 2038 年以降に対応できません。 それぞれ、 COleDateTime クラスと COleDateTimeSpan クラスに置き換えます。VC++6にはこのクラスがないみたい。 というかVisualStudio6自体が2038年には立ち上がらないそうなので、そも…

引数の取得

GetCommandLine()とか __argc、__argvを使います。ネタ元 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200408/04080046.txt

ポインタの参照渡し

CPP

地味に分らなくなるのでメモ。 void Ref(int* (&a)) { a = 0; }

ライブラリやおいそれと手の出せないコードを使ったテストをする時用のライブラリ SEXYHOOK

CPP

ライブラリの中の関数や、ある一定の行程を踏まないとまともに動作しない関数を使ったテストする時に使えます。SEXYHOOKで始めるテスト とある関数の接合部 既存のソースコードに手を加えず、自由に接合部を作成

Cで今日の日付を取得

CPP

#include <time.h> ・・・ time_t current; struct tm *local; time(&current); /* 現在の時刻を取得 */ local = localtime(&current); /* 地方時の構造体に変換 */ // yyyymmdd ってイメージの数字を作る long todaynum = (local->tm_year+1900)*10000 + (local->tm</time.h>…

迷信 new に失敗すると NULL が返る。

CPP

http://www.kijineko.co.jp/tech/superstitions/return-null-if-new-failed.htmltry-catch()で捕まえるのが確実っぽいです。

map<>で存在しないキー判定

find()で調べる。 // キーと値が が string と string なマップを生成 map<string, string> itemMap; // マップに値を挿入 itemMap.insert(pair<string, string>("hoge", "ほげ")); itemMap.insert(pair<string, string>("foo", "ふー")); if( itemMap.end() != itemMap.find("foo") ){ // 発見 }else{ // 見</string,></string,></string,>…

C++のファイル出力 fstreamの使い方

CPP

#include <fstream> using namespace std; int main( ) { ofstream ofs("data.txt"); string buf; if(ofs) { ofs << "OK" << endl; // cout に書き出すのと同じ感じで } return 0; }ネタ元 http://sato-si.at.webry.info/200711/article_3.html</fstream>

CPUのコア数を知りたい

CPUIDというのがキーワードだねCPUID/マルチ種別判定CodeZine - CPUID命令によるプロセッサ環境の判別

Visual C++ サンプル - CPUID サンプル : CPU 機能の確認

MS製CPU情報を取得するサンプルコードhttp://msdn.microsoft.com/ja-jp/library/xs6aek1h(VS.80).aspx

スレッド化でマルチコアCPUの力を知る

CPP

最近のPCなら普通コア2なCPUが載っています。 スレッド分ければ分散されて高速になるんだね。 シングルコアCPUだと逆に遅くなるはず。ネタ元 http://blogs.wankuma.com/episteme/archive/2009/09/18/181390.aspx VC++2008では上記URLにあるサンプルまんまで…

STLでfind()関数。見つからなかった場合はend()を返してくるよ

CPP

こういうこと map<long,long> tmp_map; tmp_map[0] = 0; if( tmp_map.end() == tmp_map.find(1) ){ printf("OK!"); }else{ printf("そんなばかな!"); }</long,long>

STLでパラメータにクラス/構造体を指定して、「リンケージのない型をテンプレート引数として使用することはできません。」と言われたら、グローバルに定義してるかチェックすること

CPP

関数内で定義されたクラスをテンプレートのパラメータとすることができないのはC++の仕様なのです。

C/C++で四捨五入

C CPP

小数を整数に四捨五入する場合。 #include <math.h> ... double x = 5.5674; // 例 double round_x; round_x=floor(x*100+0.5)/100; ... floor()は 入力値以下の最大の整数値を計算する関数。参考 http://oshiete.nikkeibp.co.jp/qa2207594.html http://www.bohyoh.c</math.h>…

Google Test 1.3.0を試してみる

CPP

Googleのテストフレームワークが気になったので試してみることにした。あんまり日本語の情報ってないんですね。やっぱりテストは注目度低いのかな。 使ったのはVC++ 2008 Professional Edition。多分Expressでもいけると思うです。 http://code.google.com/p…

高速な一番右端の立っているビット位置検出

C CPP

いつか役立つかも。ということでメモ http://blog.livedoor.jp/dankogai/archives/51231722.html 上記の元ネタ http://d.hatena.ne.jp/siokoshou/20090704#p1 より詳しい解説 http://d.hatena.ne.jp/siokoshou/20090706

C++ 文字列を大文字から小文字へ、小文字から大文字へ変換する

CPP

transform で行います。 #include <iostream> #include <cstdlib> #include <algorithm> #include <string> using namespace std; int main (int argc, char **argv) { string s("Hello World"); transform (s.begin (), s.end (), s.begin (), toupper); cout << s << endl; transform (s.begin ()</string></algorithm></cstdlib></iostream>…

&& と || の短絡評価

C CPP

int a = 0; int b = 1; if (a == 0 || b == 1) printf("a\n");簡単に言えば、"a == 0" で条件が満たされているのでこっちだけ評価されて、"b == 1"は評価されないよという話。"b == 1"のほうに不具合があったりすると、しばらく隠れていて開発終盤で発覚、と…

アルファベット大文字を小文字に変換する

C CPP

tolower() 関数を使います。これはC標準。ネタ元 http://always-pg.com/c/runtime_rd/character/tolower.html 逆はtoupper()関数。ネタ元 http://always-pg.com/c/runtime_rd/character/toupper.html

効率的な差分アルゴリズム

よくは読んでないけど、いつか必要そうなのでメモ。ネタ元 diff with C++ Software Design 6月号に「diffの動作原理を知る」の記事を執筆しました

LPCTSTR、LPTSTR、LPSTR、LPCSTRなどのVC++の紛らわしい定義の意味

一見正体不明のVC++オリジナル定義。よーくみれば違いが分かる。 名前 意味 LP *(ポインタ) C const TSTR TCHAR(char) STR char WSTR WCHAR(ユニコード用:2byte) ゆえに 定義 正体 LPSTR char* LPCSTR const char* LPTSTR TCHAR* LPCTSTR const TCHAR* L…

STLFiltというのを使うとテンプレートで出るコンパイルエラーが見やすくなるらしいよ

CPP

cppllで流れていたのでメモ。STLFilt:An STL Error Message Decryptor for C++

C++ のプログラムのデバッグを楽にする方法 by Google

アサートするときにスタックトレース情報を残して死ぬためのgoogle-glogというライブラリ(?)のお話。組み込み機器だとデバッガつなげない状況はいっぱいあるので このようなスタックトレースをログに残せるようにしておくのは自己防衛としてもいいですね…

ハッシュ

引数の値、文字列などからユニークな値を作り出す関数のことを ハッシュ関数。 その関数から出力された値のことをハッシュ値(または単にハッシュ)という。このハッシュ値を使ってテーブルをつくり、連想配列を実現したりする。 http://ja.wikipedia.org/wi…

継承とコンポジション

CPP

コンポジションとは、親クラスを継承しないでprivateメンバに取り込んでしまうこと。 継承と違って別物になるので、親の変更の影響を受けなくなる。 親のヘッダファイルを必ずしもincludeしなくてもよくなるので、コンパイルするファイル間の依存性が下がる…

macでプログラムしてみる

emacsも勉強中なのでついでにmacでなにか作ってみようとおもった。 GUIあったほうが楽しいので、しらべてみるとGTK+を使うといいみたい。GTK+ on OSXダウンロードしてインストール。さてコマンドラインからサンプルコードをコンパイルしようとおもったら、あ…

忘れがち。virtualって結局なんなのさ

CPP

本当に詳しい内容はググるとして・・・。 virtualは、継承(オーバーライド)していいよという意志の現れ。 逆にvirtualがなければ、断固継承(オーバーライド)させない!という意志の現れ。 という感じか。以下 VC++で動かしながらメモ 親でvirtual付けた…

忘れがち。クラス継承すると親と子どっちのコンストラクタからよばれるんだっけ

CPP

親のデフォルトコンストラクタから -> 子のコンストラクタ普段意識しなくてもいいようなクラスばかり設計してると忘れちゃいますね。

ゴッドクラスと宇宙感

何でもできるゴッドクラス。 巨大で複雑なソフトウェアを作るには非効率ですね。この世界、宇宙、世の中も非常に複雑。 だからかみさまの力はいろんなオブジェクトに委譲されているんだな。だからこの世のモノは全部かみさまの一部なんだよーなんてことを思…

スタティック(static)関数

C CPP

Cの場合 静的関数と呼ばれファイル内のみ有効で、定義されているファイル外では利用できなくなります。 C++の場合(クラスのメンバ関数で使用する場合) クラスの外部から静的メンバ関数を呼び出すには、「クラス名+"::"+静的メンバ関数名」という形式で呼び…