ページ 11

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#では参照が使えるのでポインタは必要ないです。
ご教授ありがとうございます。
参照型として宣言して使用してみます。