無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nori

無題

#1

投稿記事 by nori » 15年前

BCCdeveloperでDxライブラリのを用いたソースプログラムを分割したいのですが、
includeはDxLibだけで、externを駆使することで分割することは可能ですか。

nori

Re:無題

#2

投稿記事 by nori » 15年前

すみません。includeを含んだ宣言は必ず必要ですね。
BCCdeveloperでソースファイルを分割するには、クラスの定義が必須なのでしょうか。

あたっしゅ

Re:無題/分割コンパイル

#3

投稿記事 by あたっしゅ » 15年前

まず、タイトル「無題」がよくない。「分割コンパイル」とでもすべき。

>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 編

#4

投稿記事 by あたっしゅ » 15年前

>ソースファイルを分割するには、クラスの定義が必須なのでしょうか。

クラスの定義は必須ではない。

クラスを使うときは、普通、宣言部と実装部に分ける。
宣言部は .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.
画像

nori

Re:無題/分割コンパイル class 編

#5

投稿記事 by nori » 15年前

無題の件、失礼しました。
コメントありがとう御座います。
#ifndefを使うのは今の私にはちょっと敷居が高いように感じるので、もしよかったら使わない場合の
分割コンパイルの例もあげていただけないでしょうか。よろしくお願い致します。

ookami

Re:無題

#6

投稿記事 by ookami » 15年前

#ifndef は、多重にincludeしてしまうのを防ぐために必要です。
まぁcppファイルが2,3個なら無くても問題ないかもしれません。

VCなら#pragma onceなどがありますが、BCCでは無いはず(最近のはあるかも…?)

cppファイルを分けたいというのは、どんな理由からでしょうか?

あたっしゅ

Re:無題/分割コンパイル サンプル・プログラム

#7

投稿記事 by あたっしゅ » 15年前

なんか、一晩たってみたら、サンプル・プログラムがよくない。
せっかく、分割コンパイルした関数を呼んでなかったり、
new したオブジェクトを delete してなかったりしてるので、
追加編集した。

あたっしゅ

Re:無題/分割コンパイル class 編

#8

投稿記事 by あたっしゅ » 15年前

> #ifndefを使うのは今の私にはちょっと敷居が高いように感じるので、もしよかったら使わない場合の
> 分割コンパイルの例もあげていただけないでしょうか。よろしくお願い致します。

#ifndef 使わないだけなら、#ifndef, #define, #endif の行をとっちゃえばいいだけだけど。

#ifndef 等使うのは、複雑に入り組んだプロジェクト時、同じヘッダーファイルが
複数回インクルードされても、多重定義にならないようにするため。
#ifndef..#endif でくくっとけば、インクルードの順番を気にせずにすむ。
今の標準ヘッダーファイルは、みんな #ifndef..#endif でくくってある。

そのうち使うようになるだろうから、#ifndef..#endif 今のところは、
頭の片隅にでも入れておいてください。

あたっしゅ

Re:無題/分割コンパイル

#9

投稿記事 by あたっしゅ » 15年前

もしかして、一般的な分割コンパイルの仕方じゃなくて、BCC developer 統合環境での分割コンパイルの
仕方 ( プロジェクトへの登録の仕方等 ) をたずねてるのかな ?

nori

Re:無題/分割コンパイル

#10

投稿記事 by nori » 15年前

アタッシュさん

返信が送れてしまい申し訳ないです。
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;
}

閉鎖

“C言語何でも質問掲示板” へ戻る