• ベストアンサー

関数呼び出しについて

VB6.0でSubとFunctionの使い分けに迷っています。 ・関数呼び出しの使い分けについて教えていただけますか? ・どちらもcallで呼び出せるのでしょうか? ・関数はcallを使わなければならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

違いは2点です。 1.呼び方 SUBはCALL FUNCTIONは式、例えばD=DateDif(D1,D2) 2.答えの返し方 SUBは引数で返す、FUNCTIONは戻り値で返す。   上記では答えが自動的にDに代入される。 応用としてはX=DateDif(D1,D2)+DateDif(D3,D4)なども有ります。 この場合2つの戻り値(中間結果)を足してXに代入してくれます。

DINO-PIE
質問者

お礼

ありがとうございます。引数がいらない場合もあるのですね。

その他の回答 (3)

noname#22222
noname#22222
回答No.4

スーツのデザイナーでプログラマではありませんので参考までに・・・。 Sub は、いわゆるサブルーチンの発展形と思います。 Function は、いわゆる関数そのものでしょう。 一連の手続きをパッケージ化するだけの目的で使用するのが Sub。 一連の計算(手続き)結果を得るパッケージが Function。 この考えですと、戻り値を取得することが出来ない Function には Call は馴染み難いと思います。 *そもそも、私は Call など使いません。

DINO-PIE
質問者

お礼

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

noname#20377
noname#20377
回答No.2

#1で ラーメンを作成になってますが ラーメン作成に修正します #ラーメンを返す、もreturn ラーメン の方が良かったかなぁ・・・

DINO-PIE
質問者

お礼

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

noname#20377
noname#20377
回答No.1

値を返して欲しいかどうかで使い分けます Sub ラーメン作成1 ラーメンを作る End Sub Function ラーメン作成2 as ラーメン型 ラーメンを作る ラーメンを返す End Sub Private Sub Main Dim a as ラーメン型 call ラーメンを作成1 a = ラーメンを作成2 End Sub # C言語でいうvoidと言えば判る人は判るかも >どちらもcallで呼び出せるのでしょうか? やってみたら呼び出せました。がcallの場合Functionの戻り値が返るように書けないと思います >関数はcallを使わなければならないのでしょうか? 自分の場合、Functionは値を返す印象があるのでお勧めしません。

関連するQ&A

  • VB6.0のフォーム間の関数呼び出しについて

    VB6.0のフォーム間の関数呼び出しについて いつもお世話になっております。 これまでVB2005で開発を行ってきたのですが、 これまでの資産の関係上VB6.0での開発を行う必要が出てまいりました。 現在下記のようになっております。 フォーム1:Form1    関数:keisan フォーム2:Form2 Form1ではテキストボックスコントロールを利用した関数keisanがあります。 その関数をForm2上から呼び出すことは可能でしょうか? 以下のやり方では実行できそうでしょうか? call Form1.keisan 初歩的な質問で申し訳ございません。 なにとぞアドバイスをいただけると幸いです。

  • fortran90 引数で渡された関数の呼び出し

    fortran90を始めて間もない者です。 メインプログラムより呼び出しているサブルーチンにユーザ関数を渡しています。 このサブルーチンを自前で作成するのが目的です。 引数で受け取った関数を、自前の別関数より呼び出すにはどうしたら良いでしょうか。 Cであれば関数のポインタをグローバルな変数にセットしてやれば可能だと思いますが・・・ !-------------------------------- subroutine sub(func1, a) real::a interface real function func1(x) real::x end function func1 real function func2(x) real x end function func2 end interface call sub2(func2, a) write(*,*) a return end subroutine sub !-------------------------------- real function func2(x) real::func2, x ! ここでfunc1を呼び出したい ! func2=func1(x) end function func2 !-------------------------------- subroutine sub2(funca, a) real::a interface real function funca(x) real::x end function funca end interface a=funca(10.) return end !-------------------------------- program main external func real a call sub(func, a) write(*,*) a end program !-------------------------------- function func(x) real func, x func=2.*x*x end function func

  • 関数呼び出しに時間がかかる

    VB.NETに関してご質問があります。 下記ソースで、OKボタをクリックしたときにcmdOK_Click()関数が実行されます。 TimeLogは現在時刻をログに出力する関数です。 cmdOK_Click()内でTest()関数をコールしていますが、(1)と(2)の時間差が約3~4秒となります。 しかし、Test()関数内の「Dim rs As ADODB.Recordset = Nothing」を削除すると、(1)と(2)の時間差はほぼなくなります。 「Dim rs As ADODB.Recordset = Nothing」が関数内に記載されているだけで、時間が3,4秒もかかる原因は何でしょうか? <ソース例> 'OKボタンクリック時のイベント Private Sub cmdOK_Click(省略)  clsCommon.TimeLog("cmdOK_Click Start") '(1)現在時刻をログに出力  Test() End Sub Private Sub Test()  clsCommon.TimeLog("Test Strat") '(2)現在時刻をログに出力  Dim rs As ADODB.Recordset = Nothing End Sub

  • PowerShellの関数呼び出しについて

    PowerShellでの関数呼び出しでエラーとなります。 (定義より前にコールしているので当たり前なのですが) ********** (大まかな処理内容です) ********** call main() main() { 処理 } ******************************************************** 【質問1】  ・エラーを出さないようにする方法はないのでしょうか?   (例えばC言語のプロトタイプ宣言のような) <補足>  現在VBScriptで行っているバッチ処理をPowerShellに移行している初心者です。  色々検索はしましたが、答えが得られずの質問になります。  お時間がある時で構いませんので、ご回答をお願い致します。

  • Cで作成したDLLをVBで呼出

    Cで作成したDLLの関数をVB6.0から呼び出す事ができず、悩んでおります。 ご教授お願いします。 どの様な関数を呼び出そうとしているのかというと、以下の通りです。 <DLL Cで作成(コンパイラVC6)> void WINAPI hoge(BSTR pgname,BSTR fmt,...){ ~処理~ } /* 宣言では頭にDLLExport*/ <呼出側 VB6.0で作成> '宣言 Public Declare Function hoge Lib "hoge" _ (ByRef pgname as String , _ ByRef fmt as String , _ ParamArray args()) '呼出 call hoge("foo","baa","array1",2) この様なコードを書いております。 C側、VB側ともに固定数の引数にしてみたところ、 通ったので「ParamArray args()」の定義が違うのではないか・・・?と思っているのですが、 どの様に宣言したらよい物なのでしょうか? もしくは、そもそも全然違う箇所を間違っているのでしょうか? 宜しくお願いします。 ※ 説明の足りない箇所があれば、仰ってください。

  • VB.NET デリゲートへのコールバック関数の設定

    VB.NET デリゲートへのコールバック関数の設定 VB.NETとネイティブC/C++ DLL間でのコールバックについての質問です。 ネイティブDLLからVOID*で得られるコールバック関数をVB.NETのデリゲートに 登録するには、どのようにコーディングすればよいのでしょうか。 ---------- VB.NETソース ---------- Public Delegate Sub CALLBACK_00(ByVal Arg1 As Integer, ByVal Arg2 As Integer) Declare Function FuncPtrGet Lib "test.dll" () As CALLBACK_00 Dim Func As new CALLBACK_00(FuncPtrGet()); 2行目は、実際にはVOID*が帰るDLL関数です。 3行目がコンパイルで通りません。AddressOfで関数を指定するようにメッセージが出ます。

  • 関数呼び出しについて質問です

    関数呼び出しについて質問です 私は今以下の様なプログラムを作成し実行しました #include <stdio.h> int i = 1; void infinity(void) { printf("%010d\n",i++); infinity(); } void main() { infinity(); } 関数を無限に呼び出すプログラムです 私が使っているパソコンでは4721回関数呼び出しができました そこで質問なのですが 1関数呼び出しは有限回であることがわかったが他のパソコンと比べるとどのくらいの差になるのか? 2関数呼び出し回数の上限は何によって(OS、ソフト)決められているのか? この2つお願いします

  • VisualStudioでC関数の呼び出し

    VisualStudio2008のなんらかのプロジェクトから C関数の呼び出しを行いたいのですが、 現在、VC++とMFCでWindowsForm等を作成して そこからextern"C"でC言語の関数をcallしているのですが MFC自体、無くなりつつあり、VS2008EXPRESSではサポートされていません。できれば無料版のEXPRESSで実現したいのですが どういう方法があるでしょうか? ダイアログとボタン程度のWindowsFormは使用したいのですが。

  • VBSが分かりにくい

    こんにちは。今、仕事でVBScirptを書いています。 今まではPerlやJava,Shell等を書いたことはあるのですが、VB系は初めてです。 ・・・で微妙にVBが嫌いになり始めています。なぜかって、VB系プログラムの仕様って意味不明じゃないですか? たとえば、 ・関数を呼び出すときはCallを使う(Callは省略可) ・・・って省略化なら作らなきゃいいじゃん! ・Subプロシ-ジャは値を返さないがFunctionプロシ-ジャは値を返す ・・・ってFunctionあればSubなんていらないじゃん! まぁ、基本的なことなんでしょうけど、こういう意味不明な仕様って他にもあるんでしょうか?あるのでしたら教えてください。 また、自分は今までいろんな人が初心者はVBがとっつき易いといっているのを見てきましたが、自分にはそう思えなかった理由がこういうところにあるんじゃないかと思ってきました。皆さんはどう思いますか?

  • 関数呼び出しの処理

    関数呼び出しはCPUの処理時間を消費しますが、実際 どのような処理がされるのでしょうか?

専門家に質問してみよう