gimp源码这种函数调用为什么不加分号

hnfsdi 2019-01-07 04:17:12
我在阅读gimp函数,发现其中G_DEFINE_TYPE在多处引用并没哟加分号,这是为什么?希望有人能回答

#include "config.h"
#include <gegl-plugin.h>
#include "gimp-gegl-types.h"
#include "gimpoperationoverlaymode.h"
static gboolean gimp_operation_overlay_mode_process (GeglOperation *operation,
void *in_buf,
void *aux_buf,
void *out_buf,
glong samples,
const GeglRectangle *roi,
gint level);
G_DEFINE_TYPE (GimpOperationOverlayMode, gimp_operation_overlay_mode,
GIMP_TYPE_OPERATION_POINT_LAYER_MODE)

static void
gimp_operation_overlay_mode_class_init (GimpOperationOverlayModeClass *klass)
{
GeglOperationClass *operation_class;
GeglOperationPointComposerClass *point_class;
operation_class = GEGL_OPERATION_CLASS (klass);
point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
gegl_operation_class_set_keys (operation_class,
"name" , "gimp:overlay-mode",
"description", "GIMP overlay mode operation",
NULL);

point_class->process = gimp_operation_overlay_mode_process;
}

static void
gimp_operation_overlay_mode_init (GimpOperationOverlayMode *self)
{
}

static gboolean
gimp_operation_overlay_mode_process (GeglOperation *operation,
void *in_buf,
void *aux_buf,
void *out_buf,
glong samples,
const GeglRectangle *roi,
gint level)
{
gfloat *in = in_buf;
gfloat *layer = aux_buf;
gfloat *out = out_buf;
while (samples--)
{
out[RED] = in[RED];
out[GREEN] = in[GREEN];
out[BLUE] = in[BLUE];
out[ALPHA] = in[ALPHA];
in += 4;
layer += 4;
out += 4;
}
return TRUE;
}
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
彩阳 2019-08-13
  • 打赏
  • 举报
回复
嗯,很多情况都是宏。这也是大家的一个约定,区分宏和函数声明的好方法。
taodm 2019-01-08
  • 打赏
  • 举报
回复
不要见到()就认为是函数调用。 一般()后面不加;的,是生成型宏的惯用法。就是为了和函数型宏的调用进行区分。 表明这是在“帮你”自动生成一些代码
@风轻云淡_ 2019-01-07
  • 打赏
  • 举报
回复
如二楼所说,应该是个自我独立的函数,结尾是大括号,而不需要加分号。如果好奇心很强,可以下载下源码,新建个项目,追踪进去查看。
架构师李肯 2019-01-07
  • 打赏
  • 举报
回复
这个G_DEFINE_TYPE 应该是一个宏定义,找到这个宏定义的原型,套进去一看便知了,我猜想这个宏定义是定义一个static函数,宏定义内部写上了{},而函数定义末尾是不带分号的
hnfsdi 2019-01-07
  • 打赏
  • 举报
回复
https://stackoverflow.com/questions/47740964/what-does-g-define-type-mean-in-gtk

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧