Function prototypeとは? わかりやすく解説

FunctionPrototype クラス

名前空間: Microsoft.JScript
アセンブリ: Microsoft.JScript (microsoft.jscript.dll 内)
構文構文

Public Class FunctionPrototype
    Inherits ScriptFunction
Dim instance As FunctionPrototype
public class FunctionPrototype : ScriptFunction
public ref class FunctionPrototype : public
 ScriptFunction
public class FunctionPrototype extends ScriptFunction
public class FunctionPrototype extends
 ScriptFunction
継承階層継承階層
System.Object
   Microsoft.JScript.ScriptObject
     Microsoft.JScript.JSObject
       Microsoft.JScript.ScriptFunction
        Microsoft.JScript.FunctionPrototype
           Microsoft.JScript.LenientFunctionPrototype
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

FunctionPrototype フィールド


パブリック フィールドパブリック フィールド

( プロテクト フィールド参照)
  名前 説明
パブリック フィールド engine  ( ScriptObject から継承されます。)
プロテクト フィールドプロテクト フィールド
  名前 説明
プロテクト フィールド field_table  ( JSObject から継承されます。)
プロテクト フィールド ilength  ( ScriptFunction から継承されます。)
プロテクト フィールド parent  ( ScriptObject から継承されます。)
参照参照

関連項目

FunctionPrototype クラス
Microsoft.JScript 名前空間

FunctionPrototype プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ Item  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック プロパティ length  ( ScriptFunction から継承されます。)
パブリック プロパティ prototype  ( ScriptFunction から継承されます。)
パブリック プロパティ UnderlyingSystemType  ( ScriptObject から継承されます。)
参照参照

関連項目

FunctionPrototype クラス
Microsoft.JScript 名前空間

FunctionPrototype メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド AddField  ( JSObject から継承されます。)
パブリック メソッド スタティック スタティック CreateInstance  ( ScriptFunction から継承されます。)
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 ( Object から継承されます。)
パブリック メソッド GetField  ( ScriptObject から継承されます。)
パブリック メソッド GetFields  ( ScriptObject から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 ( Object から継承されます。)
パブリック メソッド GetMember  ( JSObject から継承されます。)
パブリック メソッド GetMembers  ( JSObject から継承されます。)
パブリック メソッド GetMethod  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック メソッド GetMethods  ( ScriptObject から継承されます。)
パブリック メソッド GetParent  ( ScriptObject から継承されます。)
パブリック メソッド GetProperties  ( ScriptObject から継承されます。)
パブリック メソッド GetProperty  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド Invoke  ( ScriptFunction から継承されます。)
パブリック メソッド InvokeMember  ( ScriptFunction から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド SetMemberValue2  ( JSObject から継承されます。)
パブリック メソッド スタティック ToString  ( ScriptFunction から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FunctionPrototype クラス
Microsoft.JScript 名前空間

FunctionPrototype メンバ

FunctionPrototype データ型公開されるメンバを以下の表に示します


パブリック フィールドパブリック フィールド
( プロテクト フィールド参照)
  名前 説明
パブリック フィールド engine  ( ScriptObject から継承されます。)
プロテクト フィールドプロテクト フィールド
  名前 説明
プロテクト フィールド field_table  ( JSObject から継承されます。)
プロテクト フィールド ilength  ( ScriptFunction から継承されます。)
プロテクト フィールド parent  ( ScriptObject から継承されます。)
パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ Item  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック プロパティ length  ( ScriptFunction から継承されます。)
パブリック プロパティ prototype  ( ScriptFunction から継承されます。)
パブリック プロパティ UnderlyingSystemType  ( ScriptObject から継承されます。)
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド AddField  ( JSObject から継承されます。)
パブリック メソッド スタティック スタティック CreateInstance  ( ScriptFunction から継承されます。)
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 (Object から継承されます。)
パブリック メソッド GetField  ( ScriptObject から継承されます。)
パブリック メソッド GetFields  ( ScriptObject から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 (Object から継承されます。)
パブリック メソッド GetMember  ( JSObject から継承されます。)
パブリック メソッド GetMembers  ( JSObject から継承されます。)
パブリック メソッド GetMethod  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック メソッド GetMethods  ( ScriptObject から継承されます。)
パブリック メソッド GetParent  ( ScriptObject から継承されます。)
パブリック メソッド GetProperties  ( ScriptObject から継承されます。)
パブリック メソッド GetProperty  オーバーロードされます。 ( ScriptObject から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド Invoke  ( ScriptFunction から継承されます。)
パブリック メソッド InvokeMember  ( ScriptFunction から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド SetMemberValue2  ( JSObject から継承されます。)
パブリック メソッド スタティック ToString  ( ScriptFunction から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

FunctionPrototype クラス
Microsoft.JScript 名前空間

関数プロトタイプ

(Function prototype から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/21 15:31 UTC 版)

ナビゲーションに移動 検索に移動

関数プロトタイプ: function prototype)は、C言語C++における関数の宣言であり、関数本体を省略して、関数名、アリティ、引数のデータ型、返り値のデータ型を示したもの。関数定義は関数が何をするかを示すが、関数プロトタイプはそのインタフェースを示すと考えることができる。

プロトタイプでは、引数の名前はオプションだが、その型指定は必須である。ただしCでは引数指定を空にすることで、未知(任意)とすることもできる。

例として、以下の関数プロトタイプを考える。

int fac(int n);

このプロトタイプから判ることは、関数名が "fac" であり、その引数は1個で整数型であり、返り値も整数型だということである。この関数を使いたい場合、プログラムのどこかで関数定義を提供しなければならない。

C/C++の場合、プロトタイプにおける型指定は、関数定義における型指定と互換性のある型であればよい。例えば、

void someFunction(const int* const array, const size_t length) {
...
}

という関数定義に対して、以下のようなプロトタイプ宣言はいずれも適合する。

void someFunction(const int* const array, const size_t length);
void someFunction(const int* array, size_t length);
void someFunction(const int array[], size_t length);

しかし以下のようなプロトタイプ宣言は型の互換性がないため、不適合となる(ポインタが指す先の値を変更できるint*と、変更できないconst int*には互換性がない)。

void someFunction(int* const array, const size_t length);
void someFunction(int* array, size_t length);
void someFunction(int array[], size_t length);

用法

コンパイラへの通知

歴史的な経緯[注釈 1]から、C89、C90およびC95までのC言語では、関数が事前に宣言されていない状況で、左括弧付きで式の中に現われた場合、その関数は暗黙のうちに int を返すものと判断され、引数については何の想定もなされない。この場合コンパイラは、引数の型やアリティをコンパイル時にチェックできない。この暗黙の型指定の仕様が問題を引き起こすケースがある。以下のコードは、暗黙に宣言された場合の関数の振る舞いを示したものである。

#include <stdio.h>

/*
 * もし、このプロトタイプ宣言があれば、コンパイラは関数呼び出し時の引数の不一致をエラーとして検出できる。
 * しかしプロトタイプが省略された場合、コンパイラは int fac() であるとみなしてしまい、
 * 実際の関数引数仕様との不一致があってもコンパイルエラーにはならない。
 * 結果的にプログラマは引数指定のミスに気づかず、プログラム実行時に未定義動作を引き起こす。
 */
int fac(int n);              /* プロトタイプ */

int main(void) {             /* 関数呼び出し */
    printf("%d\n", fac());   /* ERROR: fac の実引数がない */
    return 0;
}

int fac(int n) {             /* 呼び出される関数 */
    if (n == 0) {
        return 1;
    }
    else {
        return n * fac(n - 1);
    }
}

関数 "fac" が呼び出されたとき、コールスタックには1つの整数の引数が積まれていなければならない。プロトタイプが省略されると、コンパイラはそれをチェックできず、実行時に "fac" がスタック上の何らかの値(あるいはレジスタにある何らかの値)を引数として使うことになる(スタックの場合、スコープにない変数の値かリターンアドレスを使うことになる)。実引数が実際の関数インタフェースと一致していなかった場合、未定義動作を引き起こす。戻り値に関しても同様で、例えば本来はvoid*を返すmalloc関数をプロトタイプ宣言なしで呼び出そうとすると、intを返す関数とみなされてしまい、やはり未定義動作を引き起こす[1]

C89では、関数プロトタイプの機能がC++から逆輸入される形で標準化された。関数プロトタイプを使えば、コンパイラに関数 "fac" が1つの整数引数をとることを知らせることができ、それによってコンパイラはこのようなエラーを検出できるようになる。

なお、関数の定義および宣言における戻り値の型指定を省略した場合は、intと仮定される。また関数の定義における引数の型指定を省略した場合も、intと仮定される。

/* 戻り値は int 型で、引数は未知 */
fac();
/* 戻り値は int 型で、引数 n は int 型 */
fac(n) {
...
}

以上のように、プロトタイプ宣言なしで関数を呼び出すコードや、戻り値の型指定を省略したコードは、たとえ標準規格としては適合であっても危険であるため、多くのCコンパイラは警告を出すようになっている[2]C99では戻り値の型指定がない場合にintと仮定する仕様や、関数プロトタイプがない場合に戻り値をintと仮定する仕様が標準規格の文面から削除(廃止)され、関数は呼び出す前にプロトタイプ宣言が必須となった[3]。ただし、C99のプロトタイプ宣言では依然として引数を省略することもでき、例えば前述の例では以下のようなプロトタイプ宣言でも適合する。

int fac(); /* 引数は未知 */

一方、C++のほうはC++98として標準化された当初から完全なプロトタイプ宣言が必須となっている。またC++では、引数を省略した上記のプロトタイプ宣言は、下記のように「引数無し」と等価であるとみなされる。

int fac(void); /* 引数は無し */

ライブラリインタフェースの生成

関数プロトタイプをヘッダーファイルに置くことで、ライブラリインタフェースを指定できる。関数シンボルがエクスポートされたライブラリのビルド済みバイナリとヘッダーを併せて配布し、任意のアプリケーションからリンクして利用することも可能となる。C/C++の各処理系における標準ライブラリは一般的にこの方法で配布されている。

クラス定義

C++では、関数プロトタイプはクラス定義にも使われる。クラスに属するメンバー関数などの宣言(または定義)をクラス定義のブロック内に記述する必要がある。

#include <string>

class MyClass {
    std::string m_name;
public:
    MyClass(); // デフォルトコンストラクタの宣言。
    ~MyClass(); // デストラクタの宣言。

    // メンバー関数の宣言。
    std::string getName() const;
    void setName(const std::string& name);
};

クラス定義のブロック内に直接実装を記述したメンバー関数の内部で別のメンバー関数を呼び出す場合は、前方宣言は不要である。

#include <cmath>

class MyMath {
public:
    static double calcLength(double x, double y) {
        return std::sqrt(calcLengthSq(x, y));
    }
    static double calcLengthSq(double x, double y) {
        return x * x + y * y;
    }
};

言語バインディング

JavaJNIや、.NETP/Invokeでは、JavaやC#/VB.NETといったマネージ言語のコード側でメソッドのプロトタイプを宣言し、C/C++などで書かれたネイティブライブラリの関数シンボルを実行時にバインディング(関連付け)することができる。これにより、マネージコードからネイティブコードを利用することが可能となる。

脚注

注釈

  1. ^ C言語の仕様をANSI規格として標準化するにあたって、標準化前の古いK&Rの時代に書かれたコード資産との互換性を維持する必要があった。

出典

関連項目

参考文献


「Function prototype」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Function prototype」の関連用語

Function prototypeのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Function prototypeのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの関数プロトタイプ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2025 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2025 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2025 GRAS Group, Inc.RSS