2003-10-01から1ヶ月間の記事一覧

コンパイルは出来た。しかし……

起動した瞬間に強制終了しました^^;。実行コマンドラインはこんな感じ。g++ -o testApp test.o input/yaneKeyInput.o thread/yaneCriticalsection.o thread/yaneThreadLocal.o draw/yaneFastDraw.o timer/yaneFPSTimer.o timer/yaneTimer.o input/yaneKey…

warning: muliti-line comments

gcc

gccにはやっかい、かつ、いかにもな問題があります。簡単に言うとShift-JISを認識しないのです(EUCなら大丈夫みたい)。ですから、日本語を文字列に含んでいるソースコードは簡単には読めないのです。 何故かといいますと、SJISの2バイト目のコードが"\(0x…

もいっこ覚え書き

gccのコンパイラ識別子は__GNUC__です

とりあえず一つ

"__(アンダースコア2つ)"を先頭とする識別子は、C++実装とライブラリ用に予約されているので使ってはならないというのはC++使っている人ならよく知っていると思いますが、"_(アンダースコア1つ)"を先頭とする識別子もCの実装が使うために予約されている…

gcc

現在、windows用ゲームライブラリyaneSDK3rdstyleを、gccで通るように修正中です。これはちょっとした野望の為であり、めどがついたら、移植の課程で覚えたことを色々書きたいと思っています。

最終的に具体的な対策

……は、ありません(爆)。標準C++を使う間は、我々はインクルードガードを使い続けるしかないのです。あきらめろ! あきらめるんだ! 俺(爆)!

ソースコード互換性なんてクソクラエだ

……などと言ったらCPPコミュニティに袋叩きにあいそうなので絶対に言いません(爆)。しかしですな、現実的に実現出来ない物を#ifdef分岐で個別対応してまで「どのプラットフォームでもコンパイル可能」と言うのはどうかと思うのですよ。 それよりは、それぞ…

現実的にはどうか

Visual C++では"#pragma once"というプリプロセッサ命令をヘッダファイルに入れる事によって、インクルードガードを実現します。これは素晴らしいギミックです。欲を言えば、「ヘッダファイルはすべて#pragma onge扱いにする」というオプションを用意して欲…

他の言語ではどうか(C#を例にして)

C#ではそもそもヘッダファイルという概念がありません(C++でのクラスがすべてインラインで記述されていると考えて下さい。こっちの方がずっと自然です)。当然インクルード文もありません。プロジェクトに含まれるソースファイルは一度すべて一本のファイル…

何故必要ないのか?

そもそも、何故C++ではヘッダファイル(.h)と実装ファイル(.cpp)が分離されているのでしょうか? 入門書の中には「実装を隠蔽してインターフェイスを公開する為」とか書いているかもしれません。これは「嘘」です。少なくとも、後付けの理屈であることは間違…

ヘッダファイルはどこへ向かっているのか

ヘッダファイルがどのように使われるかはわかりました。では「何故」ヘッダファイルが必要なのかという事を検討しましょう。まず、このような小細工が必要な言語は、現代プログラミング言語ではC++しか無いという事を強調しておきます。これはくるしまぎれの…

補足

ヘッダファイルに実装まで書くと、そのメソッドは暗黙的にインライン指定された事になります。inline展開を拒否する方法をみはえるは知りません。知っている方教えて下さい(こんなんばっかやな^^;)

ヘッダファイルをインクルードする理由

ヘッダファイルとはなんの為にあるのでしょうか? 何故.cppファイルからインクルードしなければならないのでしょうか? その為には、C++言語において、ソースコードがどのようにコンパイルされるかを把握する必要があります。話がずれますが、.hのファイルは…

ヘッダとソースの微妙な関係

……さて

長々と語って来ましたがこのインクルードガードなるTipsは恐ろしくダサイ代物です。時代遅れもはなはだしいです。以下、延々と愚痴らせていただきます(笑)

インクルードガードの必要性

なぜ重複インクルードされると困るのかといいますと、コンパイルエラーになるからです(笑)。理由を以下に説明します #includeが行う処理は(わかりやすく言えば)テキストファイル(この場合は.cpp)の中に別のテキストファイル(この場合はhoge.h)を単純…

一応理屈の説明を

"#"で始まる命令はプリプロセッサ命令と言って、コンパイルの前のタイミングにプリプロセッサによって処理される物です(プリプロセス処理と言います)。どこかの.cppファイルの内部で[#include"hoge.h"]と書かれていれば、プリプロセッサはhoge.hを頭から読…

インクルードガードとはなにか

簡単に言うと、ヘッダファイルにお約束のように書く3行の事ですhoge.h内 #ifndef HOGE_H //HOGE_H //hoge.h内本文】 #endif //インクルードガードの目的はヘッダファイルの2重読み込みを防ぐ為です。

時代遅れの技術に頼るのはもうやめよう(やめたい)

C++を使う上で必須の知識であるにも関わらず、入門書の類には全くと言っていいほど紹介されないTipsに「インクルードガード」があります。これ、正式な呼称では無いので一般には通じないかもしれません*1。呼び名が無い事自体おかしいんだけどな……。 このイ…

特に最後の擬似リフレクション(ちょっと違う)は

そういう事が出来ると知らなかっただけにインパクトが大きいです。テストクラスのスケルトンを吐くマクロもあるみたいだし(未調査)、これは現実のプロジェクトでも対応できる、、、、か?

みはえる自身が懐疑的だった事に対するQ&A

Q 「まずテストコードを書き、コンパイルエラーを出して、メソッドが実装されていない事を確認する」って本末転倒じゃない? A 誤字その他の理由で、偶然テストが別のメソッドを呼び出してしまう事を抑制させています(まあちょっと苦しい気もするが)Q テス…

今のところの判断できるのは

これ便利だわ(笑)。 「テストコードを書く」という作業さえ定型化させてしまう*1事ができれば、ユニットテストは強力なツールになる、なーんて事はもっと有名な人が山ほど言っているのでそちらを参照(笑)。 *1:企業だったらコーディングルールに含める

CppUnit1.9.11

どうもメインプロジェクトはCppUnit2に移行したようで、CppUnitは1.9.11(test4)で止まってるみたいですな。 以前買った本「CppUnitによるユニットテスト技法(だったかな?)」を毎日ちょっとずつ進めて、ユニットテストベースの開発が(特にC++において)現…

で、Visual Studioではなんでmakeがいらないの?

VSではプロジェクトファイルがmakefileの代わりになり、makeの作業はVSが代わりにやってくれるのでいらないのです。逆に、makefileによって構築されたソフトウェアソリューション*1は、VSからは認識する事ができません。対応策は一応あって、VS上から「メイ…

Antの登場

実行環境依存のmake&makefileにうんざりした人が、AntなるJavaアプリケーションを作成しました。これはJavaが動く環境ならどこでも動く訳で、かつmakefileに相当するものがXMLで記述できる為、人気を博しているようです。 Antはまだほとんど調べてないんです…

makeの仲間

makeは、makeの他にもVisualStudioに付属するnmakeや、gnu makeなど多数の亜形があるようです。調べてませんが、構文規則やオプション設定が微妙に違うのでしょう。

makeの目的

makeはMAME*1の仲間ではありません(当たり前だ)。複数のソースファイルからなるプログラムのコンパイル作業を自動化するためのツールです。あらかじめmakefileというファイルを作成し、そこにコンパイル手順を記述しておきます。コンパイルしたくなったら…

makeってMAMEの仲間ですか?(違う)

プログラマなら誰でも知っている(筈の)makeというユーティリティーツールがあります。もちろんみはえるは、、、、知りませんでした(爆)。VisualStudio系プログラマには必要の無い機能だからです(たぶん)。ただ、色々あって今後使う可能性が出てきたの…

で、何が不満なのかというと

「何故、デフォルトで生成される名称が"stdafx"なのか?」です。この英単語6字にいかなる意味を見出す事も出来ません。恐らく"std"+"afx"なのでしょう。"std"は"standard"なのだろう(多分)。で、"afx"ってなによ? 実はこの"afx"、MFCでプログラミングし…

概要

VisualC++には「プリコンパイル済みヘッダー」という物があります。これは、滅多に変更されないヘッダーファイル(windows.hとか)を、あらかじめコンパイルしておく事でコンパイル時間を短縮させるギミックです。 普通にウィザードを使ってプロジェクトを生…