ページ 11

無題

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;
}