ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

お世話になります。
質問させて頂きたいことは
複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか?
1つめは
あるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。
2つめは
クラスを作成し、静的メンバ関数、静的メンバ変数とする。

ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。

検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

本当に共通して使われる関数があるなら単なるC言語的な関数で良いと思いますのでクラス化する必要は有りません。

ただし、データ保持する変数と組になる関数であるならばクラス化を考えてください。
例えば日付を処理する関数と日付を保持する変数があるなら、それは1つのオブジェクトで1つのクラスとすべきです。

>ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、

安易なグローバル変数を避けることはコードの見通しやバグの削減につながるので良いことですが、むやみにグローバル変数をやめて逆に複雑になるなら避けたほうが良いです。

と言うことで私の答えは1でも2でも無い3です。
変数と関数を組とした1つのクラスとして、そのクラスのインスタンスをグローバル変数として宣言してください。
    • good
    • 0
この回答へのお礼

今回質問させて頂いた関数というのはレジスタに設定データを書き込んだり、読み込んだりする関数で、変数というのはその設定データを一時的に格納する構造体なんです。

静的関数、静的変数を考える前はおっしゃるようにこれらを1つのクラスとし、クラスのインスタンスを作成していたのですが、それだとそのインスタンスが開放されるまでインスタンス分メモリがとられてしまう為、なるべくメモリの消費をしないようなプログラムにしようと思っています。それで今回のようなことを考えてみたのですが。。
これだと、クラスの中身が静的変数と静的関数のみで、これでいいのだろうかと不安に感じているのですが、やはり普通にクラスにし、インスタンスを作成するのが妥当なのでしょうか?

お礼日時:2009/05/26 16:54

>静的関数のみなので、インスタンスを作ってはいけないというのはわかるのですが、スレッドや割り込みで使ってはいけないというのはなぜでしょうか?グローバル関数、変数とほとんど大差がないような気がするのですが。

。。

失礼。少し失言でした。
クリティカルセクション等でガードすれば問題なく使えます。

>CだとMFCのような画面構成の作成ができない為、ちょっとCには出来ないです。
???
C言語の関数記述はC++コンパイラでも使えます。当然、VC++でも使えますよ。
int sub(int in)
{
return in+1;
}
をメンバ関数から呼び出せます。
int class::member(int in)
{
return sub(in);
}
    • good
    • 0
この回答へのお礼

>クリティカルセクション等でガードすれば問題なく使えます。
なるほど、グローバル変数・関数と同じように衝突しないように気をつけろということですね。

C言語の記述をVCに書いては、という話だったんですね。
勘違いして、Cのみで作成しては、という話かと思ってしまいました。理解不足でした。
ヒープということは、mallocとかをつかってメモリ確保しては?という話なのでしょうか?

お礼日時:2009/05/27 11:11

メモリの使用量ですが、大差ないです。


この場合は、デザイン(設計)を重視するべきじゃないですかね。
なんなく、継承とかよりも、単独のオブジェクトとした方が
よさげな予感はします。
あとは、シングルトンなり、コンポジットなり用途次第で。。。

ちなみに、プログラム実行時には、
当然実行ファイル自体のファイルサイズ分メモリを使用しますから
C++を選択する時点でメモリの使用量はおさえられないと考えた方がよいです。

ということで、メモリ使用量を抑えたいというのならば、
Cで、ヒープ使うのが一番無難じゃないですか?

# s/レジスタ/レジストリ/ とか思ってみる今日この頃
    • good
    • 0
この回答へのお礼

クラスの継承は共通の動作をする関数が複数のクラスで必要な場合に有効なようですね。
よくよく考えてみたら、それぞれのクラスでレジストリの読み書きという処理は同じですが、レジストリの保存先や、読み込んできたデータを格納する構造体が違っているため継承は今回のプログラムには向いていないみたいです。

CだとMFCのような画面構成の作成ができない為、ちょっとCには出来ないです。。

ご回答ありがとうございました。

お礼日時:2009/05/27 09:17

決してインスタンスを作らない&スレッドや割り込みで使わない事さえ心がければ罠は無いとは思います。

将来誰かの手でメンテされる可能性があるならコメントで正確に記載しておいてください。ただ、私の感想としてはクラスとしては気持ち悪いですね。
    • good
    • 0
この回答へのお礼

やはりクラスとしては気持ち悪いですよね。
私も出来上がったクラスの整然と並んでるstaticを見て、不気味に感じました。。

>決してインスタンスを作らない&スレッドや割り込みで使わない事さえ心がければ罠は無いとは思います
静的関数のみなので、インスタンスを作ってはいけないというのはわかるのですが、スレッドや割り込みで使ってはいけないというのはなぜでしょうか?グローバル関数、変数とほとんど大差がないような気がするのですが。。。
ご回答宜しくお願い致します。

お礼日時:2009/05/27 09:06

>今回質問させて頂いた関数というのはレジスタに設定データを書き込んだり、読み込んだりする関数で、変数というのはその設定データを一時的に格納する構造体なんです。



レジスタ?って事はマイコン?ですかね。周辺IOの制御レジスタだと思うんですが。メモリ消費を抑えたいという点からもマイコンっぽいですが。
設定データの受け渡しなら構造体パラメータを読み書きの関数に渡すのはだめなんでしょうか?わざわざグローバル変数である意味が分かりません。
それとインスタンスはスコープ外に出ればメモリから消滅しますので、ローカル変数で宣言すればその関数を抜ければ消滅します。
それでもメモリ消費が多いというなら、C言語の関数で書いたほうがメモリが少ないかも知れません。

ちなみにstaticな関数や変数だとインスタンス関係なしに実態が存在する事になります。まぁ単なるC関数と変数と同じでクラス名::メンバ名でアクセス出来てしまいます。
    • good
    • 0
この回答へのお礼

レジスタといってもマイコンでありません、組み込み機器のアプリケーションを開発しています。
ただ、通常のPCではなく組み込み機器用のOSで開発している為、メモリに対しては敏感であったほうがいいと思い、プログラムでのメモリの消費を気にしています。
レジスタに変数を格納するのは、一度機器の電源が切れても設定データを保持させたい為です。

おっしゃる通りstaticな関数、変数だとインスタンスを関係なく使用できるため、インスタンス用にメモリを消費させなくて良いと思ったため、静的関数・変数にこだわってみました。

とりあえずは静的関数、変数でプログラムを作ってみたのですが、静的関数・変数を使うことで生じる問題等ということはりますでしょうか?
重ねての質問で申し訳ありませんが、お答え頂ければと思っております。

お礼日時:2009/05/26 18:07

私だったら、その共通の関数をメンバとして持つクラスを作って、それを継承して使うことを考えます。


単純な継承でもいいし、多重継承もありでしょう。
    • good
    • 0
この回答へのお礼

その前の方に対しても説明させて頂いたのですが、共通の関数というのがレジスタの読み書きをする関数、変数はそれを一時的に保存する構造体なのですが、そのような関数でも継承を使うことが有効なのでしょうか?
継承はほとんど触れておらず、なんとなくのイメージしかもっていないのですが、もし継承した場合だと、子のクラスは親のクラスの関数(今でいうレジスタ操作の関数)をメモリ消費なしに普通に呼び出せるのでしょうか?

お礼日時:2009/05/26 16:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q複数のクラスで共通した関数を使いたい場合

C++なのですが、複数のクラスで共通して使いたい関数がある場合、親クラスに共通したい
メンバ関数を作り、その子として複数のクラスを作るのが良いのでしょうか?

それ以外の方法だとクラスの外でstatic宣言した関数であればクラス内で使えるようでした。
(static宣言しないとコンパイルエラーとなりました)

しかし以下のサイトにあるように「共通関数継承のデメリット」があるようで推奨していないようです。

ttp://d.hatena.ne.jp/katzchang/20110216/p1
ttp://blog.jnito.com/entry/20110217/1297896355

なお、自分には上記サイトの内容は難しくて理解できませんでした。
つまり、「数のクラスで共通して使いたい関数がある」場合、上記サイトはどうすればいいと言っているのでしょうか?

よろしくお願い致します。

Aベストアンサー

C++で「入れ子クラス(クラスの中に別のクラスを作ること)」は、可能ですが、私は使ったことがないです。

で、static の有無と、「クラスの中にクラスを作ったから」というのは、直接的な意味では関係ないです。
クラスの中にある(static でない)関数は、「メンバ関数」と呼ばれます。
これは、「クラスによって生成されたインスタンス」にバインドされた関数です。

例えば、
class A()
{
void a();
};

という場合、
A val; と、インスタンス(ここでは、val)を定義して、

val.a();

というけいろでしか呼び出すことはできません。
これは、val という「インスタンスに対して」何かせよといっているので、インスタンスが指定されないと「誰に?」ということになります。
だから、「別のクラスから呼び出している」つもりで、A::a() という呼び出しはできないわけです。

一方、static メンバ関数は、インスタンスにバインドされない関数です。

class A()
{
static b();
};

という場合、(アクセう制御が間違ってなければ) A::b() という呼び出しができます。
ただし、文法上は可能ですが、本来は、class A のことを司る関数であるべき(A のメンバですから)で、Aと関係なく関数を集めるという用途で使用するべきではありまん。

本当に、「自分だけが使う」関数であれば、それが小さなものなら、main と同じファイルの中で、単純に書けば済むことです。

main.cpp
----------------

int my_func_add(int a, int b)
{
int wk = a + b;
return wk;
}

int my_func_sub(int a, int b)
{
int wk = a - b;
return wk;
}

int main()
{
// いろいろな処理
int c = my_func_add(1, 2);
int d = my_func_sub(c, 2);

}

こんな感じ。

もう少し増えれば、

my_fun.h というファイルに
int my_func_add(int a, int b);
int my_func_sub(int a, int b);

として、

my_func.cpp に実体を書いて

#include "my_func.h"

int my_func_add(int a, int b)
{
int wk = a + b;
return wk;
}

int my_func_sub(int a, int b)
{
int wk = a - b;
return wk;
}

main.cpp で

#include "my_func.h"
int main()
{
// いろいろな処理
int c = my_func_add(1, 2);
int d = my_func_sub(c, 2);

}

などとすればいいです。

C++で「入れ子クラス(クラスの中に別のクラスを作ること)」は、可能ですが、私は使ったことがないです。

で、static の有無と、「クラスの中にクラスを作ったから」というのは、直接的な意味では関係ないです。
クラスの中にある(static でない)関数は、「メンバ関数」と呼ばれます。
これは、「クラスによって生成されたインスタンス」にバインドされた関数です。

例えば、
class A()
{
void a();
};

という場合、
A val; と、インスタンス(ここでは、val)を定義して、

val.a();

というけいろでしか...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qクラスのメンバ関数の呼出しについて

こんにちは。
初心者ですが、よろしくお願いします。

MFCを使用してダイアログベースのアプリケーションを作成しています。

<ヘッダ>
class Sample : public CDialog
{
(略)
public:
int SampleA(CString);
(略)

<ソース>
UINT SampleB(LPVOID pParam)
{
int n;

n = Sample::SampleA(CStringA) ←エラー
return 0;
}

メンバ関数ではない、SampleBから、上記のように呼出すと、「静的でないメンバ関数の中で呼び出しが正しくありません。」というエラーが表示されてしまいます。
ヘッダ内のメンバ関数宣言をstaticにすれば問題は解決できるのですが、このやり方しかないのでしょうか。

よろしくお願いします。

Aベストアンサー

#1> Sample smp = new Sample();
#1> n = smp.SampleA(...)

マチガイ。正しくは:

Sample* smp = new Sample();
int n = smp->SampleA(...);

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);

QCStringの文字列検索&抜き出しについて

お世話になります。
///////////開発環境///////////
WinXP VisualStudio 2005 SDI MFC

以上の環境にてプログラムしています。

現在CString型の変数の中にある文字列操作について悩んでいます。

例えば、 CString Test(:program!~program@123.456 TEST :message);

このような内容が入ってるとします。
こんな時に例えばTESTを抜き出したい時にどうすればいいでしょうか?
なお、毎回TESTという文字列ではなくTEST2などの文字列が変わるもの
だとするとバイト数指定が出来なくて困っています。
バイト数指定しないでTESTのTのアドレスをGETしてそれを'\0'までを
切り抜くと:messageの部分まで取れてしまいます。
でもバイト指定が可変なので、出来ない・・。どうすればいいのでしょうか??
同様にmessageの部分も毎回変わっていてバイト数指定出来ません。
こちらの方は、文字列の最後から:を探していって:が見つかったらその
アドレスから'\0'までを切り出せばいいと思うのですが、もし
messageの部分に:mess:ageこういうメッセージが送られて来た時に、
:ageしか取れなくなり、本当はmess:ageを切り抜きたいのです。
せっかくMFCのCStringを使っているので、strtokやstr~などのC言語関数
は避けたいのですが、何かいい案ありますでしょうか??
ご教示宜しくお願いいたします。

お世話になります。
///////////開発環境///////////
WinXP VisualStudio 2005 SDI MFC

以上の環境にてプログラムしています。

現在CString型の変数の中にある文字列操作について悩んでいます。

例えば、 CString Test(:program!~program@123.456 TEST :message);

このような内容が入ってるとします。
こんな時に例えばTESTを抜き出したい時にどうすればいいでしょうか?
なお、毎回TESTという文字列ではなくTEST2などの文字列が変わるもの
だとするとバイト数指定が出来なくて困っています。
...続きを読む

Aベストアンサー

CStringクラスの持っているメソッドのFind と Mid を使う。

CStringT のメンバ (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/abzc9989(VS.80).aspx
CStringT::Find (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/hz2099kw(VS.80).aspx
CStringT::Mid (ATL/MFC)
http://msdn2.microsoft.com/ja-jp/library/b4c90k3d(VS.80).aspx

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QCStringからchar*への型変換について教えてください。

以前の質問に

int型 → CString型/char型

がありましたが、

CString型をchar*型に変換する方法を
教えていただければありがたいです。

MSDNで「LPCTSTRキャスト」が説明されていましたが、
例が載ってないのでよくわかりませんでした。

よろしくお願いします。

Aベストアンサー

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。
char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。

直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。
ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。

MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。

QLPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

Aベストアンサー

補足です。
2005デフォルトのUNICODEを変更する方法は
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更することで可能です。

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

Q複数ファイルで使うグローバル変数の位置

メイン関数の処理で、関数A→関数B→関数Cという順序で関数が呼び出される場合(1関数1ファイルとします)、関数A,B,Cすべてで使用するグローバル変数の宣言を関数Bのファイルでおこなって、他のファイルではそれをexternするというのでも問題ないでしょうか?

Aベストアンサー

問題ありません。
が、しかし、そのような方法は、実務レベルの場合は、行いません。
以下のような方法をとります。

ファイル名:xxx_ext.c
変数のみを宣言したファイル。

ファイル名:xxx_ext.h
上記の変数のみを宣言したしものをexternで参照するファイル。

ファイル名:func_a.c
関数Aのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_b.c
関数Bのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_c.c
関数Cのファイル。
このファイルで、#include xxx_ext.h する

上記のようにすることで、externで参照する変数が1つのファイル内に閉じこめられるのでメンテナンス性がよくなります。たとえば、ある理由があって、変数Xの型をintからdoubleに変えることを想定してください。
xxx_ext.c とxxx_ext.hの2つのファイルのみが変更対象
となります。
上記のようにしない場合は、3つのファイル(あるいはそれ以上)を変えることになります。

問題ありません。
が、しかし、そのような方法は、実務レベルの場合は、行いません。
以下のような方法をとります。

ファイル名:xxx_ext.c
変数のみを宣言したファイル。

ファイル名:xxx_ext.h
上記の変数のみを宣言したしものをexternで参照するファイル。

ファイル名:func_a.c
関数Aのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_b.c
関数Bのファイル。
このファイルで、#include xxx_ext.h する

ファイル名:func_c.c
関数Cのファイル。
このファイル...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング