C言語でコールバック関数を実装する方法

清浅
リリース: 2019-04-16 14:12:26
オリジナル
6401 人が閲覧しました

コールバック関数は、統一されたインターフェイスを通じてさまざまな関数を実装することです。C 言語のコールバック関数は、渡されたさまざまなパラメータに従って、コード内でさまざまなコールバック関数を呼び出すことです。

コールバック関数は、プログラム A です。メンバーによって明示的に呼び出すことができない関数。コールバック関数は、コールバック関数のアドレスを呼び出し元に渡すことによって呼び出されます。コールバック関数の使用は必須であり、統一されたインターフェイスを通じてさまざまなコンテンツを実装したい場合、コールバック関数は非常に適しています。

C言語でコールバック関数を実装する方法

【おすすめチュートリアル: C言語チュートリアル

たとえば、いくつかの異なるデバイスに対して異なる表示関数を作成しました。

void TVshow(); 
void ComputerShow(); 
void NoteBookShow()...等等。
ログイン後にコピー

これは、統一された表示関数を使用したいためであり、現時点では失われた関数を使用できます。

void show(void (*ptr)());
ログイン後にコピー

使用すると、渡されたパラメータに従ってさまざまなコールバック関数が呼び出されます。

プログラミング言語が異なると、構文が異なる場合があります。ここでは C 言語のコールバック関数の例を示します。1 つのコールバック関数はパラメーターを受け取りませんが、もう 1 つのコールバック関数はパラメーターを受け取ります。

#include <stdlib.h>
#include <stdio.h>
int Test1()
{
    int i;
    for(i=0; i<30; i++)
    {
        printf("The %d th charactor is: %c\n", i, (char)(&#39;a&#39; + i%26));
    }
    return 0;
}
int Test2(int num)
{
    int i;
    for (i=0; i<num; i++)
    {
        printf("The %d th charactor is: %c\n", i, (char)(&#39;a&#39; + i%26));
    }
    return 0;
}
void Caller1( void (*ptr)() )//指向函数的指针作函数参数
{
    (* ptr)();
}
void Caller2(int n, int (*ptr)())//指向函数的指针作函数参数,这里第一个参数是为指向函数的指针服务的,
{
    //不能写成void Caller2(int (*ptr)(int n)),这样的定义语法错误。
    (* ptr)(n);
}
int main()
{
    printf("************************\n");
    Caller1(Test1);     //相当于调用Test1();
    printf("&&&&&&************************\n");
    Caller2(30, Test2); //相当于调用Test2(30);
    return 0;
}
ログイン後にコピー

レンダリングは次のとおりです

C言語でコールバック関数を実装する方法

上記の呼び出しは、コールバック関数のアドレスを呼び出し元に渡すことによって実装されますが、注意が必要です。パラメーターを使用したコールバック関数。

コールバックを実装するには、まず関数ポインターを定義する必要があります。ここでは関数ポインタの定義について簡単に説明します。

例:

int (*ptr)();
ログイン後にコピー

ここで、ptr は関数ポインタであり、(*ptr) の括弧は省略できません。

括弧の優先順位がより高いためです。アスタリスクの宣言なので、戻り値の型が整数の関数宣言になります。

要約: 以上がこの記事の全内容です。皆様のお役に立てれば幸いです。

以上がC言語でコールバック関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート