C/C++

C++

【基本】抽象クラス
実際に抽象クラスを作成して、いろいろ試してみます。

【基本】演算子new
演算子newを少しばかり..

【基本】C++文法
関数のデフォルト引数など

【基本】stream
C++のファイルI/Oを

【基本】static constメンバ変数
#define による定数定義を辞めよう(プリプロセッサに頼るまい)

【STL】vector
STLのvectorを使用します。私、大好き..

【STL】string
STLのstring。char型を使いたくなくなります。

【STL】map
STLのmap。ハッシュテーブルではありませんが、便利です。

【STL】set
STLのset。重複なしの2進木の集合。

【STL】コンテナ Tips
STLのコンテナのTips

【OOP】RTTI
実行時型情報

【感動】Topic
私がC++で感動、感嘆したことなどのTopic

【バグ】VC++6.0とISO C++ の違い2000/04/13
Webで公開されているものです。MSDN 2000/01にも記述あり。

【STL】ソース解読中..
STLのソースを解読して理解を深めようと思い。SGIのソース(vector)を 勉強しています。一緒に勉強しましょう。私には壁が高いのですが..

【Design Pattern】C++によるデザインパターン
OOPのお手本として。

サンプルソースはVC6(SP3)で確認済みです。文法ミスの確認のため わざとコンパイルエラーを出すソースもあります。これも含めた確認済みです。 コンパイルは -GX オプションを付けて下さい。
C:\> cl -GX sample.cpp

C

  1. コンパイラがK&RかANSI-Cか判別
  2. Little Endianか Big Endidanか判別
  3. 診断機能<assert.h>


  1. コンパイラがK&RかANSI-Cか判別
     汎整数拡張の違いを利用します。
    	unsigned char uc = 1;
    	if ( uc > -1 ) {
    	    printf( "ANSI-C\n" );
    	} else {
    	    printf( "K&R\n" );
    	}
    	
     つまり、ANSI-C であれば int型に、K&Rであれば unsigned int型に unsigned char ucが格上げされることを利用しています。


  2. Little Endianか Big Endidanか判別
     システムがLittle Endian か Big Endian かを調べます。sizeof( int )の値をここ では 4 と仮定しています。
    	unsigned int ui = 0x01234567 ;
    	char *p,*q;
    	p = ( char * )&ui;
    	q = p + 3;
    	if ( *p < *q ) {
    	    printf( "Big Endian\n" );
    	} else {
    	    printf( "Little Endian\n" );
    	}
    	
     実はメーカー名だけで判別出来たりして(笑)


  3. 診断機能<assert.h>
     ヘッダ assert.h はassertマクロを定義している。忘れてはならない のは、assertマクロは assert.h で定義していないマクロNDEBUGを参照 していることである。通常は下記の形式で使用する。
    	#include <assert.h>
    	void assert( int expression );
    	
     プログラム中の随所でassertマクロを埋め込むことが出来る。expressioin が偽であるとき、標準エラー出力に諸情報(__FILE__,__LINE__含む)を出力した後、 プログラムを終了させる(abort())。  デバッグ時にはありがたいがリリース時には不要なコードである。その場合は 下記のようにすることでassertマクロを無効にできる。
    	#define NDEBUG    /* アサーション無効 */
    	#include <assert.h>
    	


to home
by masu
e-mail: massun.masumoto@nifty.ne.jp
URL : http://homepage3.nifty.com/~masumoto/