ページ 11

数値型変数のC言語とC#のnullチェックについて

Posted: 2014年4月01日(火) 22:17
by みつ
CコードをC#に移行していますが、
数値型変数のC言語とC#のnullチェックについて
不明点があり質問しました。

下記コードです。

コード:

/ Cコード
int testA(int* sign,int* dm_d)
{
	if (sign == NULL) {
         return -1;
	}
	if (dm_d == NULL) {
         return -2;
	}
	return 0;
}
// C#コード
public int testA(out int sign,out int dm_d)
{
	// 下記でエラーとなる
	if (sign == NULL) {
         return -1;
	}
	if (dm_d == NULL) {
         return -2;
	}
	return 0;
}
Cコードでは数値型引数sign、dm_dに対して
nullチェックを行っているので
C#でも同様にnullチェックを行おうと思ったらエラーとなりました。
そもそも数値型引数に対してnullチェックは必要?と思いましたが、
何かチェック方法がございましたらご教授願います。

Re: 数値型変数のC言語とC#のnullチェックについて

Posted: 2014年4月01日(火) 22:35
by YuO
みつ さんが書きました:Cコードでは数値型引数sign、dm_dに対して
nullチェックを行っているので
C#でも同様にnullチェックを行おうと思ったらエラーとなりました。
そもそも数値型引数に対してnullチェックは必要?と思いましたが、
何かチェック方法がございましたらご教授願います。
チェックは不要です。
outは呼び出し側でオブジェクトへの参照を用意する必要がありますが,それは強制され,コンパイル時にチェックされています。
これは値型でも参照型でも同じです。
オフトピック
参照型をoutにするというのは,

コード:

void func (struct class_type ** obj_ref);
のようなコードに相当し,obj_refがNULLでないことは言語レベル (CLIレベルかは確認していません) で保証されています。

Re: 数値型変数のC言語とC#のnullチェックについて

Posted: 2014年4月02日(水) 09:32
by せんちゃ
outで取った引数にnull判定は必要ないかと思われます。
ちょっと試しに自分の環境で試した感じだとそもそもoutパラメータは関数内で必ずなんらかの値を割り当てなければいけないようなので
null判定をする以前に割り当てられていない点でエラーが発生します。
場合によって割り当てられないけど参照渡ししたい、といった場合はrefが適切のようです

Re: 数値型変数のC言語とC#のnullチェックについて

Posted: 2014年4月06日(日) 21:40
by みつ
せんちゃさん、YuO さん回答ありがとうございます。

outで取った引数にnull判定は必要ないとの事で
チェック不要で進めていきます。

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