torutkのブログ

ソフトウェア・エンジニアのブログ

C++

C++プログラマとしてのスキルを測る質問

C++

C++プログラマ採用試験で聞くとよい質問だそうです。 The Best Questions for Would-be C++ Programmers,Part 1 The Best Questions for Would-be C++ Programmers,Part 2 Part 1の10の質問をざっと日本語訳 クラスとは何ですか? C言語の構造体とC++言語の…

GCCの標準インクルードパス

C++

/usr/local/include 知らなかった。てっきり/usr/includeだとばかり。GNUコーディング規約によると、以下である。 includedir Cプリプロセッサ制御行 #include によりプログラムからインクルードされるヘッダファイルを置くディレクトリ. これは通常 /usr/lo…

Doxygenプラグイン

Eclipse上からDoxygenを使用するプラグイン eclox があります。Eclipse 3.3以上対応で、本日現在 ver.0.8.0が最新です。オンライン更新サイトおよびパッケージアーカイブのダウンロードの2つが用意されています。 雑感 Eclipse上からDoxygen設定ファイルをGU…

Boost 1.37.0のRPMパッケージ作成メモ

C++

11/3付けでBoost 1.37.0がリリースされました。今年に入って頻繁なバージョンアップが行われています。(1.35, 1.36, 1.37といずれも2008年)1.37.0のRPMパッケージ作成を行いました。CentOS 5ですが、GCC 4.x系の環境なら同じように出来るかと思います。RPM…

契約による設計(Design by Contract)の実装〜事後条件判定をBoost.Lambdaの遅延評価で実現

C++

d:id:torutk:20081013で検討したC++事後条件コードを、クロージャの概念が利用できるBoost.Lambdaライブラリを使って実装します。 実装イメージ 事後条件のイメージとしては、以下のコードのようにメソッドの最初(でなくてもよいが)にアサート文を記述して…

Eclipse CDTの日本語化言語パック(サードパーティ版)、うむむ

Eclipse 日本語化言語パック(サードパーティ版)が正式リリースされたようです。 http://sourceforge.jp/projects/nttdatagroup-oss-square/wiki/blanco_Framework%2Fnlpack.eclipse.ganymede インストール方法は書いてないのかな・・・。NTTデータはじめ大…

Eclipse CDTでCppUnitプラグイン

CppUnitのプラグインがありました。既に作成したクラスに対してテストケースクラスの雛形を生成する機能があります。 ECUT(Eclipse C++ Unit Testing)プラグイン インストールメモ 上記URLからファイルをダウンロード(ECUT_M2.zip) ファイル(ECUT_M2.zip…

契約による設計(Design by Contract)の実装〜事後条件判定の改善

C++

d:id:torutk:20080914で契約による設計をC++言語で実装してみました。しかし、事後条件については、簡潔に書くのが難しいです。 事後条件のコード検討 ちょっとした名簿を例にコードを見ていきます。PersonListクラスとPersonクラスがあり、PersonListのadd…

cmakeツール最初の一歩

C++

UNIXでは、C/C++のソースコードをビルドするにはMakefileを書いてmakeツールを使うのが一般的です。しかし、Makefileを書くのは大変なので*1、もっと楽なツールを探すと出てくるものの一つがcmakeです*2。 cmakeのインストール(CentOS 5.2) # yum install …

契約による設計(Design by Contract)の実装

C++

契約による設計(Design by Contract)の実装を検討 - torutkのブログで契約による設計の実装を検討しました。今回は、検討に従って実際にC++でプログラムコードに表してみます。 事前条件 C言語標準マクロ assert を用いた実装 C言語の標準マクロassertを使…

契約による設計(Design by Contract)の実装を検討

C++

契約による設計では、責務を遂行する関数に対して事前条件、事後条件を定義し、クラスに対してクラス不変条件を定義します。これら条件を実行時に検証して違反が検出されればエラーを通知(伝播)することで関数の仕様と実行結果が明確になります。しかし、…

基底クラスのメンバ関数のオーバーロードを派生クラスで定義すると‥

C++

C++言語における名前隠ぺいは、関数の場合引き数に関係なく名前の一致のみで発生するため、派生クラスの定義に基底クラスのメンバー関数のオーバーロードを記述すると、基底クラスの同名関数が見つからないコンパイルエラーが発生します。(「Effective C++…

GCCの関数名展開マクロ__PRETTY_FUNCTION__

C++

GCCで提供される、関数名に展開されるマクロなのですが、__FUNCTION__と違い、引き数、戻り値、そしてネームスペースまで含めて展開されます。優れもの! logbook::Person::Person(std::string) しかし引き数にvectorがあるとものすごい展開がなされ‥。ログ…

先月CodeGear DevCamp#9でC++ネタでしゃべってきました

C++

ちょっと古いですが、先月CodeGear DevCamp(第9回)でC++テクニカルセッション「暴れん坊のC ++をどう押さえて使いこなすのか」のスピーカをしました。以下URLで資料公開されています。 http://dn.codegear.com/jp/article/38299Q&Aで質問あがらなかったの…

Eclipseの日本語化事情

昨日CodeGearのDevCampでいがぴょんこと伊賀敏樹さんがEclipse日本語化についてのお話しをしていました。Eclipse 3.3での日本語化の状況は混乱状態であったので、セッションを聞いて状況について整理することができました。以下に、利用者側の観点でEclipse…

Linux版Eclipse CDTと日本語化

日本語化パック、日本語化プラグイン Eclipse 3.3(Europa)は日本語化の言語パックがリリースされず、Pleiadesプラグインによる日本語化の手段を取っていました。PleiadesはAOPによるオン・ザ・フライ翻訳を行っているらしく、起動に時間がかかるほか動作が…

ACE+TAO 5.6.3とLinuxとEclipse

C++

不本意ながらちょっとC++モード。 ACE+TAO 5.6.3をCentOS 5上にインストール CentOS 5上でACEとビルドツールMPCの確認をしたいが、ソースからビルドするのは手間なので、rpmパッケージを探してみたところ、以下サイトでバイナリおよびソースパッケージを配布…

Windowsでシステムヘッダーファイルのインクルード順番

C++

Windowsでネットワーク周りのプログラムを作っていてたまに直面するのが fd_setの二重定義コンパイルエラーです。とをどちらに先にインクルードしているかで発生したりしなかったりとちょっと厄介な問題です。現象から、より先にをインクルードしないと発生…

ACE+TAO

C++

年内に予定されている次のリリース(1.6.2)において、Visual Studio 2008がサポートされる予定。 ACE_InputCDR, ACE_OutputCDRクラスの調査 2008.1.13修正 ACEでソケット通信は簡単に記述できるようになりますが(特にUDPは!)、異なるエンディアンのプラッ…

シグナル・スロットとは

C++

Qtのシグナル・スロット、libsigc++、Boost.Signalなど、C++ではシグナル・スロットの概念を実装するライブラリがいくつか利用できます。 このシグナル・スロットはどんなものかをよく解説している記事(英語)があります。 http://scottcollins.net/article…

Java/C++ビルド時間(続)

id:torutk:20071104のビルド時間比較の続き、C++のACEを単独でビルドした時間を計測。C++がコードサイズに指数的にビルド時間がかかるのではないかと推測。そこで、ACE+TAOの一部分であるACE部分だけビルドした時間を計測しました。また、同規模のJavaプロダ…

Java/C++100万行規模ソフトウェアのビルド時間比較

JavaとC++のビルド時間を比較してみようと思いました。そこで、規模が大き目で、かつコード量が近いJavaとC++で書かれた2つのソフトウェアを選び、これらをビルドするのにかかる時間で比較してみました。C++はコンパイルに時間がかかるのは予想していました…

CppUnitをVisual Studio 2005で

C++

「C++開発者のための単体テスト入門」 http://www.atmarkit.co.jp/fdotnet/cpptest/cpptest02/cpptest02_01.html Visual Studio 2005でCppUnitをビルドしテストを実行できるよう環境構築する内容を解説した記事です。 Visual C++ 2005 Express+Platform SDK…

Cプログラマーは整数値が好き

C++

たまたま試験で問題のあったソースを見ていると、あちらこちらで0、1、2、3、・・・といった即値と比較するコードが散見されました。1が成功・0が失敗、とかその他いろいろな状態をなんでも0、1、2、・・・といった整数値で表しています。また、for文が…

ACE+TAO 5.5.7のインストール

C++

先週リリースされたVer.5.5.7のビルドがやっと通りました。 Obtaining ACE, TAO, CIAO and DAnCE Windows XP SP2 + Visual C++ 2005 Express + Platform SDK for Windows Server 2003 SP1 Windows Vista(64bit) + Visual Studio .NET 2003 前者の環境(Visua…

Visual C++ 2005 ExpressとEmacs

C++

普段Meadow(Windows用Emacs)を使っていると、統合環境のお仕着せのエディタを使うのが苦痛となります。ただし、Emacsくらいのエディタになると大半の統合環境はキーバインドを用意はしてくれています。それでもねぇ・・・と思っていたら、 「Visual Studio …

汎用ライブラリACEとCORBAライブラリTAOのVer.5.5.6

C++

矢継ぎ早に5.5.5、5.5.6とリリースされました。 http://download.dre.vanderbilt.edu/5.5.6では、C++標準例外構文(try-catch構文)を直接使用するようにコード全体が書き直っています。もともとは例外機構をサポートしていないコンパイラ用にACE_TRY ACE_CAT…

C++でソケットプログラミングをするのはつらい

C++

久々にC++(実際はCが近いか)でソケットAPIを使うプログラムを作ってみました。ソケットAPIはC言語APIなので、せっかくクラス・メンバー関数で作り上げた中にC的な手続きべったりなコーディングをしなくてはなりません。これは、マルチスレッド(pthread)やGU…

ACE+TAOビルドとOpenSSL

C++

ACE+TAOでは、VC++のプロジェクトとしてssleay32.libをリンクします。しかし、 http://www.slproweb.com/products/Win32OpenSSL.html で公開されているOpenSSLのWindows用バイナリでは、VC++のリンクオプションであるMD,MT,MDd,MTdに合わせたssleay32MD.lib,…

Effective C++第3版

C++

今月の通勤のお供はこの本です。 第2版は標準C++以前の記述のためか、例外、テンプレートなどが不十分なためイマイチだったのがこの都度標準C++に追いついたものとなりました。ほとんど書き直しに近い改訂なので、第2版を捨てて買う価値ありです。