加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

理解此代码需要帮助

发布时间:2020-12-16 10:20:27 所属栏目:百科 来源:网络整理
导读:在一个gstreamer-plugin中有一些代码: static GstFlowReturngst_ebml_peek_id_full (GstEbmlRead * ebml,guint32 * id,guint64 * length,guint * prefix){ GstFlowReturn ret; ret = gst_ebml_peek_id_length (id,length,prefix,(GstPeekData) gst_ebml_rea
在一个gstreamer-plugin中有一些代码:

static GstFlowReturn
gst_ebml_peek_id_full (GstEbmlRead * ebml,guint32 * id,guint64 * length,guint * prefix)
{
  GstFlowReturn ret;

  ret = gst_ebml_peek_id_length (id,length,prefix,(GstPeekData) gst_ebml_read_peek,(gpointer) gst_ebml_read_br (ebml),ebml->el,gst_ebml_read_get_pos (ebml));
  if (ret != GST_FLOW_OK)
    return ret;

  GST_LOG_OBJECT (ebml->el,"id 0x%x at offset 0x%" G_GINT64_MODIFIER "x"
      " of length %" G_GUINT64_FORMAT ",prefix %d",*id,gst_ebml_read_get_pos (ebml),*length,*prefix);

现在看到gst_ebml_peek_id_length()的第4个参数是

(GstPeekData) gst_ebml_read_peek

其中gst_ebml_read_peek是另一个函数,其定义是:

static const guint8 *
gst_ebml_read_peek (GstByteReader * br,guint peek)
{
  const guint8 *data = NULL;

  if (G_LIKELY (gst_byte_reader_peek_data (br,peek,&data)))
    return data;
  else
    return NULL;
}

现在我想问你的是:gst_ebml_read_peek在定义中有两个输入参数,那么如何在没有参数的情况下调用它(在上面的代码中)?

编辑:
你可以在这里找到这个代码
http://gstreamer.freedesktop.org/data/coverage/lcov/gst-plugins-good/gst/matroska/ebml-read.c.gcov.html

从194左右开始.

解决方法

这是一个做类似事情的简单示例:

#include <stdio.h>

typedef int (*binaryop)(int,int);

static int add(int a,int b) {
  return a + b;
}

static int mul(int a,int b) {
  return a * b;
}

static void print_result(binaryop op,int a,int b) {
  printf("%dn",op(a,b));
}

int main() {
  print_result(add,2,3);
  print_result(mul,5,7);
  return 0;
}

print_result函数将另一个函数作为参数,然后调用它.当您只编写没有括号的add时,该函数尚未被调用.它只在函数调用表达式中调用,它看起来像这样:function_name(arguments).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读