アプリ版:「スタンプのみでお礼する」機能のリリースについて

標準モジュールにFunctionプロシージャーを作ったのですが、

警告1
関数 'プロシージャー名' には値を返さないコード パスがあります。
実行時に結果が使用されると、null 参照の例外が発生する可能性があります。

という警告が出るのですが、
値を返さないコード パスがどのことを指してるのかわかりません。

Function test()
test = "aaa"
End Function

のように値が返るようにしています。

コードが長すぎてここに記載できないのですが、
値が返るようにしているのに、なぜこのエラーが出てしまうのでしょうか?

A 回答 (3件)

警告を表示させないようにするだけなら簡単ですが、それでは根本的な解決にはならないので、「値を返さないコードパス」を探してみましょう。



ありがちなのとして
○ エラー処理などで Exit Functionを使っている
例)
' エラーになったっときには関数を終了させる
If エラー発生 Then
Exit Function
End if

○ Then側だけで、Else側だけ、特定のCaseだけで、戻り値が設定されている
例)
' A<>0のときは戻り値が無い
If A = 0 Then
test="aaa"
End If

' Aが1でも2でも無いときに、戻り値が無い
Select Case A
Case 1
test="aaa"
Case 2
test="bbb"
End Select

注意しなければいけないのは、コンピュータは「絶対有り得ない」かどうかを判断できない、ということです。

例えば、上記Select Caseで、Aは絶対に1か2になるようにプログラムを作ってあったとします。
それを知っている人間は、このSelect Caseで「値を返さないコードパス」は存在しない、と判断できます。
しかし、コンピュータには、それを知る手段がありません。A=0になっているかもしれない、そのときには値を返さない、と判断します。




> コードが長すぎてここに記載できないのですが

そういう「長いコード」を整理することも考えましょう。
    • good
    • 1
この回答へのお礼

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

お礼日時:2013/04/09 22:08

条件などによって分岐している場合、


それら全てがきちんと値を返しているか
(返すようになっているか)確認されては?
    • good
    • 2
この回答へのお礼

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

お礼日時:2013/04/09 22:08

>コードが長すぎてここに記載できないのですが、


>値が返るようにしているのに、なぜこのエラーが出てしまうのでしょうか?

あなたが気づいていないだけで、どこかに値を返さないところがあるとしかいいようがないかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/09 22:08

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

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


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