ページ 1 / 1
無題
Posted: 2010年8月22日(日) 09:44
by nori
BCCdeveloperでDxライブラリのを用いたソースプログラムを分割したいのですが、
includeはDxLibだけで、externを駆使することで分割することは可能ですか。
Re:無題
Posted: 2010年8月22日(日) 10:02
by nori
すみません。includeを含んだ宣言は必ず必要ですね。
BCCdeveloperでソースファイルを分割するには、クラスの定義が必須なのでしょうか。
Re:無題/分割コンパイル
Posted: 2010年8月24日(火) 21:45
by あたっしゅ
まず、タイトル「無題」がよくない。「分割コンパイル」とでもすべき。
>externを駆使することで分割することは可能ですか。
可能。
分割コンパイルの例。
VC++ 2010 EE でコンパイルしたんで、BCC でやるときは、
#include "stdafx.h"
は、取り除いてくれ。
あと、Win32 コンソール・アプリにしたんで、
_tmain のとこは、main なり、WinMain なりに書き換え必要か ?
funca.h
#ifndef __FUNCA_H
#define __FUNCA_H
extern void funca();
#endif
funca.cpp
#include "stdafx.h"
#include "funca.h"
void funca()
{
}
// END.
test.cpp
// test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
//
#include "stdafx.h"
#include "funca.h"
int _tmain(int argc, _TCHAR* argv[/url])
{
funca(); // 2010(H22)-08-25 追加
return 0;
}
// END.

Re:無題/分割コンパイル class 編
Posted: 2010年8月24日(火) 21:47
by あたっしゅ
>ソースファイルを分割するには、クラスの定義が必須なのでしょうか。
クラスの定義は必須ではない。
クラスを使うときは、普通、宣言部と実装部に分ける。
宣言部は .h ファイルに、実装部は .cpp ファイルに書く。
classa.h
#ifndef __CLASSA_H
#define __CLASSA_H
//
//
//
class TClassA {
public:
TClassA() {}
~TClassA() {}
void func();
};
#endif
classa.cpp
// classtest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
//
#include "stdafx.h"
#include "classa.h"
void TClassA::func() {
}
// end.
classtest.cpp
// classtest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
//
#include "stdafx.h"
#include "classa.h"
int _tmain(int argc, _TCHAR* argv[/url])
{
TClassA* p = new TClassA();
p->func();
delete p; // 2010(H22)-08-25 追加
return 0;
}
// end.

Re:無題/分割コンパイル class 編
Posted: 2010年8月25日(水) 01:39
by nori
無題の件、失礼しました。
コメントありがとう御座います。
#ifndefを使うのは今の私にはちょっと敷居が高いように感じるので、もしよかったら使わない場合の
分割コンパイルの例もあげていただけないでしょうか。よろしくお願い致します。
Re:無題
Posted: 2010年8月25日(水) 08:02
by ookami
#ifndef は、多重にincludeしてしまうのを防ぐために必要です。
まぁcppファイルが2,3個なら無くても問題ないかもしれません。
VCなら#pragma onceなどがありますが、BCCでは無いはず(最近のはあるかも…?)
cppファイルを分けたいというのは、どんな理由からでしょうか?
Re:無題/分割コンパイル サンプル・プログラム
Posted: 2010年8月25日(水) 21:11
by あたっしゅ
なんか、一晩たってみたら、サンプル・プログラムがよくない。
せっかく、分割コンパイルした関数を呼んでなかったり、
new したオブジェクトを delete してなかったりしてるので、
追加編集した。
Re:無題/分割コンパイル class 編
Posted: 2010年8月25日(水) 21:15
by あたっしゅ
> #ifndefを使うのは今の私にはちょっと敷居が高いように感じるので、もしよかったら使わない場合の
> 分割コンパイルの例もあげていただけないでしょうか。よろしくお願い致します。
#ifndef 使わないだけなら、#ifndef, #define, #endif の行をとっちゃえばいいだけだけど。
#ifndef 等使うのは、複雑に入り組んだプロジェクト時、同じヘッダーファイルが
複数回インクルードされても、多重定義にならないようにするため。
#ifndef..#endif でくくっとけば、インクルードの順番を気にせずにすむ。
今の標準ヘッダーファイルは、みんな #ifndef..#endif でくくってある。
そのうち使うようになるだろうから、#ifndef..#endif 今のところは、
頭の片隅にでも入れておいてください。
Re:無題/分割コンパイル
Posted: 2010年8月27日(金) 21:24
by あたっしゅ
もしかして、一般的な分割コンパイルの仕方じゃなくて、BCC developer 統合環境での分割コンパイルの
仕方 ( プロジェクトへの登録の仕方等 ) をたずねてるのかな ?
Re:無題/分割コンパイル
Posted: 2010年8月29日(日) 05:43
by nori
アタッシュさん
返信が送れてしまい申し訳ないです。
BCCでの分割コンパイルの仕方もいまいちわかりません。
たとえば1から100を合計するプログラムを作成したい場合
以下のmain.cppとsum.cppを同一プロジェクト内に作成し、makeすればよいのでしょうか。
//main.cpp
#include <stdio.h>
#include "sum.cpp"
int main(void)
{
sum();
return 0;
}
//sum.cpp
#include <stdio.h>
int sum(void);
int sum(void)
{
printf("%d\n",(1 + 100) * 100 / 2);
return 0;
}