ページ 1 / 1
C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 08:29
by みつ
現在、C++にて記述されたソースの解析を行っています。
初心者なものでC言語入門を参照しながら行っていますが
最初でつまづいてしまtっているのでご教授願願います。
※不明点
コード:
#ifndef __FORMAT_A__
#define __FORMAT_A__
#ifdef __cplusplus
extern "C"
{
#endif
extern int A_RETURN(
int* iPara1
,int* iPara2
,double* dPara3
,const double dPara4
);
#ifdef __cplusplus
}
#endif
#endif
A_RETURNでは整数に変換?を行っているのでしょうか?
int*、double*の意味がどうも分かりません。
どうかよろしくお願いします。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 09:09
by usao
>A_RETURNでは整数に変換?を行っているのでしょうか?
関数の宣言だけ見ても この関数の動作はわかりません.
動作が知りたいのであれば,実装コードの方を読むしかないと思います.
>int*、double*の意味がどうも分かりません。
これは ポインタ ですね.
参照されている「C言語入門」にもきっと書かれています.
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 09:21
by みつ
usaoさん、早々の回答ありがとうございます。
A_RETURNはxxxx.hファイルに記載されていて
実装コードはxxxx.cに記載されていました。
関数の宣言のみをxxxx.hファイルで行っているのですね。
VBと違いとりかかりにくいです。もっと勉強します。
ポインタについてC言語入門に記載されていましたので
確認します。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 09:45
by usao
ところで,どうしても自分で解読しなければならないのでしょうか…
まぁそこらへんは事情次第ですが,
C初心者 という状態で C++のコードを解析 というのはとても辛そうです.
(その関数が何をするものなのか?という情報すらもないようですし)
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 10:46
by softya(ソフト屋)
> C初心者 という状態で C++のコードを解析 というのはとても辛そうです.
extern "C"で宣言されている関数がC言語の文法の範囲で記載されているのなら、C言語の知識でなんとかなりますね。
【補足】
#ifdef __cplusplusとわざわざ記載されているので、C++じゃなくてもコンパイルが通る仕様だと思います。
つまりC++って関係ないのでは。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 11:32
by N.R
みつ さんが書きました:
A_RETURNはxxxx.hファイルに記載されていて
実装コードはxxxx.cに記載されていました。
関数の宣言のみをxxxx.hファイルで行っているのですね。
プログラムは基本上から順に解釈されるので
コード:
↓A_RETURN を呼べ... A_RETURN ってどれ?
↓
↓A_RETURN という関数があるよ
となってしまいます。
なのでプロトタイプ宣言して
コード:
↓A_RETURN という関数がどこかにあるからね
↓
↓A_RETURN を呼べ... A_RETURN はどこかにあるはずだね
↓
↓A_RETURN という関数があるよ
と解釈できるようにしているのですね。
「どこかにあるからね~」と言っておいて作っていないと今度はリンカーエラーが出るわけです。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 13:09
by usao
>#ifdef __cplusplusとわざわざ記載されているので、C++じゃなくてもコンパイルが通る仕様だと思います。
>つまりC++って関係ないのでは。
プログラムにCの部分とC++の部分があって
A.c と B.cpp の両方からこのヘッダをincludeして使うとかいうことではないでしょうか.
>実装コードはxxxx.cに記載されていました。
とのことなので,少なくともA_RETURN関数はCっぽいですね.
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 17:59
by みつ
たくさんの回答ありがとうございます。
>ところで,どうしても自分で解読しなければならないのでしょうか…
>まぁそこらへんは事情次第ですが,
>C初心者 という状態で C++のコードを解析 というのはとても辛そうです.
>(その関数が何をするものなのか?という情報すらもないようですし)
C++のコード解析をしてC#に変換するという作業をしています。
ただC++もC#も初心者なのでとても辛く理解するのに時間がかかります。
>とのことなので,少なくともA_RETURN関数はCっぽいですね.
C++で作成したがコードはCで記述されていると言われました。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 18:04
by みつ
追加で質問にて申し訳ありませんがどうかご教授願います。
コード:
int d_to_dm(
int* sign
,int* dm_d
,double* dm_m
,const double d
){
/* 処理・・・・ */
return 0;
}
C言語のconstをC#に記載するとエラーとなってしまいます。
(型が必要です)
C#では何か代用して使用できるのでしょうか?
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 18:10
by みけCAT
みつ さんが書きました:C言語のconstをC#に記載するとエラーとなってしまいます。
(型が必要です)
C#では何か代用して使用できるのでしょうか?
関数の引数にはできないかもしれませんが、const自体は普通に使えそうです。
const (C# リファレンス)
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 18:13
by softya(ソフト屋)
>C++のコード解析をしてC#に変換するという作業をしています。
>ただC++もC#も初心者なのでとても辛く理解するのに時間がかかります。
そもそもC#では参照が使えるのでポインタは必要ないです。
> C#では何か代用して使用できるのでしょうか?
たしか使えないはずです。
【補足】
みけCATさんの書いている通り、引数には使えません。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 18:51
by ISLe
こういうときこそC++/CLIを利用するべきではないのでしょうかね。
Re: C言語初心者です。どうがご教授お願いします。
Posted: 2014年4月01日(火) 18:58
by みつ
みけCATさん、softya(ソフト屋) さん、ISLe さん
回答ありがとうございます。
>関数の引数にはできないかもしれませんが、const自体は普通に使えそうです。
調べたところ関数の引数にはどうにも使えませんでした。
>そもそもC#では参照が使えるのでポインタは必要ないです。
ご教授ありがとうございます。
参照型として宣言して使用してみます。