C言語
の編集
Top
/
C言語
[
トップ
] [
編集
|
凍結
|
差分
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
Active
Rubyチートシート
成果物リスト
勉強会ログ
↑
アイデア
Webサービス案
Androidアプリ案
電子工作案
GreaseMonkey案
contribute
編集
↑
Recent
2023-11-12
自動車保険
2023-08-04
HDDリスト
2023-08-03
docker
2023-05-17
Rubyチートシート
2023-03-30
RAID5/トラブル20230324
2023-03-25
PC/misuzu
2023-03-24
PC
2023-03-23
PC/DESKTOP-7SL5J8R
2022-12-16
Linux
2022-11-09
Linux/ディスクイメージ取得
2021-05-23
CTF
2021-03-17
PC/misumi
2020-08-31
COMP
2020-03-28
PC/misumi/ubuntu
Windows 10
2018-06-04
Microsoft decode 2018 2日目
Microsoft decode 2018 1日目
2018-04-07
カメラ
2018-01-06
電力自由化
2017-12-21
CROSS×BEATS
B
I
U
D
H
[[]]
<br>
--
目次 #contents *コーディングスタイル プライベートで書くとき用。 -実装はすべてヘッダファイルに --分けるのが手間 -namespaceは使わない --完全装飾もusingも手間 -デフォルトでusing namespace std; -プロパティどうしよう --リードオンリーなら、constにしてコンストラクタで初期化 --[[マジカルテンプレート>http://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=C%2B%2B%A4%C7%A5%D7%A5%ED%A5%D1%A5%C6%A5%A3]] --[[いっそ独自拡張を使う>http://ml.tietew.jp/cppll/cppll_novice/thread_articles/1640]] --アクセッサはできれば書きたくない *リファレンス C/C++ Reference 標準ライブラリのリファレンス http://www.cppreference.com/ ロベールのC++教室 よくまとまっているので、基本的なことを再確認するのにいい http://www1.kcn.ne.jp/~robe/cpphtml/index.html C++入門 Kitty on your lapの人。ここもよくまとまっている http://wisdom.sakura.ne.jp/programming/cpp/index.html *ブックマーク メモリー管理の内側: 動的アロケーションの選択肢とトレードオフ、そして実装 http://www-06.ibm.com/jp/developerworks/linux/041217/j_l-memory.html AspectC++ http://www.aspectc.org/Home.1.0.html Deep C++ http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndeepc/htm/deep051099.asp?frame=true *規格書 ここから過去ログあさると、ANSI版がよさげ INCITS/ISO/IEC 14882-2003ってのがANSI版なのかな? http://www.trickpalace.net/cppll/ ANSI版 http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882%2D2003 http://www.techstreet.com/cgi-bin/detail?product_id=1143945 ISO版? http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%3A2003 JIS なんでPDF版売ってないかね http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3014%3A2003&dantaiCd=JIS&status=1&pageNo=1 *便利ツール An STL Error Message Decryptor for C++ CodeWarrior用もあるよ http://www.bdsoft.com/tools/stlfilt.html **C++ lint C++って意外とlintないんだね。以下のようなところをチェックしてくれるやつがほしい -未初期化バグ -基底クラスがvirtualデストラクタじゃない -コピーコンストラクタでのメンバコピー忘れ -ctor,dtorのnew,deleteが対応してない(staticに分かるメモリリークチェック) よさげなのあったけど、売り物($200) シングルユーザライセンス買ってサーバに置くのってありかな http://www.gimpel.com/ 高いやつ。$1000。ルールを自分で定義できるらしい http://www.abxsoft.com/codchk.htm Meyerたんの比較記事。いろいろあるね http://www.aristeia.com/ddjpaper1_noframes.html *プリプロセッサ gccのリファレンス。妙な挙動に悩んだときにいいかも。 http://www.sra.co.jp/wingnut/gcc/cpp-j.html よくごっちゃになるけど、#xは引数の文字列化。x ## yは文字列の連結。 *2進リテラル カコイイ。 http://d.hatena.ne.jp/Robe/20060721 再帰テンプレート版もどこかで見たけど、 こっちのほうがstatic assertが厳しくできそう ---( #include
/* 静的アサーション * 静的定数 b が偽だとコンパイルエラーにする。 * b が動的な値の場合もコンパイルエラー。 */ #define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0) /* 2進1バイトリテラル * CHAR_BIT に関わらず、8 ビット(16進2桁)まで。 */ #define BYTE2(x) \ (SASSERT(1 <= sizeof(#x)-1 && sizeof(#x)-1 <= 8), \ SASSERT((0x##x & ~0x11111111) == 0), \ (0x##x >> 0) & 0x01 | \ (0x##x >> 3) & 0x02 | \ (0x##x >> 6) & 0x04 | \ (0x##x >> 9) & 0x08 | \ (0x##x >> 12) & 0x10 | \ (0x##x >> 15) & 0x20 | \ (0x##x >> 18) & 0x40 | \ (0x##x >> 21) & 0x80) /* 2進2バイトリテラル */ #define WORD2(x1, x0) \ ((BYTE2(x1) << 8) | BYTE2(x0)) /* 2進4バイトリテラル */ #define DWORD2(x3, x2, x1, x0) \ ((WORD2(x3, x2) << 16) | WORD2(x1, x0)) int main() { printf("%X\n", BYTE2(01011011)); printf("%X\n", WORD2(11001011, 10000011)); printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000)); return 0; } ---) *sizeof ---( char* string = "string"; sizeof(string) == sizeof(char*) sizeof("string") == 7 ---) なぜなら"string"は、const char*ではなくconst char[]だから。 つまり、上記2進リテラルマクロのsizeof(#x)-1は、 引数を文字列として見た場合の長さ。面白い。 ついでに、 ---( sizeof(void) == 1 sizeof(void*) は、実装依存 ---) らしい。 *コンストラクタから例外を投げてはいけない らしい。 なんで?継承したときに基底クラスのコンストラクタが例外を投げるとまずいから? つまり、下記でsuperが例外を投げるとhogeがリークすると? ---( ctor() : hoge_(new Hoge()), super() { } ---) それって、メンバの宣言順序に気をつければいいだけの話? ---( ctor() : hoge_(new Hoge()), super(hoge_) { } ---) …となるとややこしくなりそうな気はするが。 ちなみに、 ---( A* a = new A(); ---) でAのコンストラクタが例外を投げたとき、newで確保されたメモリは自動解放されるらしい。 operator newがある場合も、対応するoperator deleteが呼ばれるとか。よくできている。 *placement new 趣味ではあまり使うこともないが。 なかなか資料がないが、ここを読めば基本的に解決。 http://www.fides.dti.ne.jp/~oka-t/cpp-labyrinth.html ちなみに#include
してある場合、クラスメンバにplacement newを追加しなくても使える。 (
内でグローバルのplacement newが定義され、これが使われる)
はいつの間にかincludeされていることが多いので、 placement newは何もしなくても使えると思い込みがちかも。 もっと詳しい話 http://d.hatena.ne.jp/masugata_k/20071120/ *STLコンテナのかんたん初期化 operator+=とoperator,のオーバーロードらしい。すげぇ http://www.codeproject.com/vcpp/stl/PGIL.asp ---( vector
primes; set_cont( prime ) += 1, 2, 3, 5, 7, 11; ---) boostにも取り込まれている http://www.boost.org/libs/assign/doc/index.html *C++でプロパティ クラス内部はともかく、外から見たら綺麗でいいね http://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=C%2B%2B%A4%C7%A5%D7%A5%ED%A5%D1%A5%C6%A5%A3 *C++0x 200x年のうちに策定完了、らしい http://ml.tietew.jp/cppll/cppll/article/12064 http://www.kmonos.net/alang/d/template-comparison.html
タイムスタンプを更新
テキスト整形のルールを表示する
Last-modified: 2014-12-24(水) 16:49:50