• gcc中的##表示什么?


    在gstreamer的源码中,看到了GST_BOILERPLATE_FULL宏的定义,原来在这个宏中就定义着_base_init, _init, _class_init这些函数的原型,难怪我们的源码中不需要定义这些函数原型呢,而且这个宏中最重要的就是可以说明我们的plugin是继承自哪个 class的(看GObject的相关内容),而且这个宏最重要的就是调用了gst_type_register_static_full函数,将 _base_init, _init, interface等等这些内容全部注册进了gstreamer。

    OK,在这个宏的定义部分,就看到了##这样的代码,这是什么意思?这其实表示连接字符串,很特别。比如:

    #define GST_BOILERPLATE_FULL(type, type_as_function, parent_type, parent_type_macro, additional_initializations) \
    \
    static void type_as_function ## _base_init (gpointer g_class); \
    ......
    .....
    ....

    这里type_as_function是我们传入GST_BOILERPLATE_FULL的第二个参数,比如是 gst_passthrough,那么,这里static void type_as_function ## _base_init最后就变成了static void gst_passthrough_base_init了,这就是_base_init函数的申明了,amazing.
  • 相关阅读:
    【Redis】事务
    【Web】Apache HttpClient & HttpAsyncClient
    【Spring】导入配置文件
    【SpringBoot】@Conditional注解家族
    【前端开发】dva+antd+react
    【Spring】EnableXXX
    POJ-2240-Arbitrage
    POJ-2387-Til the Cows Come Home
    hdu-1847-畅桶工程续
    Floyd算法模板(多源最短)
  • 原文地址:https://www.cnblogs.com/super119/p/1996143.html
Copyright © 2020-2023  润新知