今天开始正式研究gedit的源码,第一次看c/c++的源码,有点吃力啊,坚持不懈,慢慢来。

在gedit.c文件中遇到了G_BEGIN_DECLS和G_END_DECLS,平常搞C语言的东西,我个人几乎没这样用过(怕是太菜了。。)遂顺藤摸瓜,抽丝剥茧。(以下用G宏代替)

由宏定义联想这两个东西,例如#define PRINT printf("Hello World\n");在程序中可以直接使用PRINT输出,G宏的形式很像宏定义啊。果真,上网一查,得到如下定义

//https://github.com/bratsche/glib/blob/master/glib/gmacros.h

/* Guard C code in headers, while including them from C++ */

#ifdef __cplusplus

# define G_BEGIN_DECLS extern "C" {

# define G_END_DECLS }

#else

# define G_BEGIN_DECLS

# define G_END_DECLS

#endif

它的庐山真面目出来了,一段预处理命令。大概解释一下,如果定义了__cplusplus,则定义G宏按照C程序风格编译,否则按照C++风格编译。

那这个__cplusplus是什么东西呢?查阅资料可知,这是一个相当于标示的东西,stackoverflow讲其值是201402L,总之值不同,又发现在GCC下其值为1,它是long int型,按照此标识来用就行了。

如果定义了__cplusplus宏,则extern "C", 这是什么意思呢?指的是按照C语言的风格进行编译等。鄙人才疏学浅,C风格和C++风格的区别是什么?例如test(int , int)C++支持重载,当编译器对函数处理之后,得到的名字是_test_int_int,而在C语言中,得到的是test。应该看到区别了,这是C++专门为了调用C函数设计的。

有必要复习一下extern在C语言中的应用,extern我个人理解就是外部声明,全局可调。我写了一个函数extern test(int, int),则我在另一个C文件中调用test()即可。

php endall(),从G_BEGIN_DECLS和 G_END_DECLS说起相关推荐

  1. 从G_BEGIN_DECLS和 G_END_DECLS说起

    2019独角兽企业重金招聘Python工程师标准>>> 今天开始正式研究gedit的源码,第一次看c/c++的源码,有点吃力啊,坚持不懈,慢慢来. 在gedit.c文件中遇到了G_B ...

  2. GStreamer插件实列rockchipmpp

    尽管这些年arm发展取得了不少的进步,不过对于音视频的编解码仍然心有余力不足,好在芯片厂家在SOC里面提供了硬件加速能力.善于发挥出芯片的能力,才能打造出完美的应用.今天我们一起来探索一下rk3568 ...

  3. php endall(),ob_end_flush

    用户评论: [#1] nico (at) nokes.de [2012-08-26 16:24:37] best way to compress a css code: header('Content ...

  4. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  5. ATK插件化开发:AtkPlug,AtkSocket

    Table of Contents 介绍 接口: atk_plug_get_id () atk_socket_embed () AtkPlug例子 ta-plug.c ta-plug-accessib ...

  6. Glib学习笔记(1)

    GLib学习笔记 一 Glib笔记1 以前主要是做C++,最近有个机会转到嵌入式的C,大部分用的是Glib/Gobject系统,前一周的样子把相关内容大致浏览了一遍,主要以reference Menu ...

  7. 转载]Linux Gstreamer and GST-OMX插件

    原文地址:Linux Gstreamer and GST-OMX插件 作者:wuqiseu 1. Gstreamer基本介绍 Gstreamer是linux上的多媒体框架.如下所示:         ...

  8. DBUS基础知识(非常全面)

    DBus作为一个轻量级的IPC被越来越多的平台接受,用于进程间通信或进程与内核的通信. DBus进程间通信主要有三层架构: 1.底层接口层:主要是通过libdbus这个函数库,给予系统使用DBus的能 ...

  9. dbus-glib编程4:使用dbus-glib

    dbus-glib是dbus底层接口的一个封装.本讲我们用dbus-glib做一个dus接口,并写一个客户程序. 1.接口描述文件 首先编写接口描述文件.我们要实现的连接的公共名是"org. ...

最新文章

  1. 基于问题导向与成果产出的教学模式:《大数据与城市规划》特色课程
  2. iOS 利用RunTime检测控制器是否销毁
  3. session的生命周期
  4. 如何查看linux系统的体系结构
  5. windows系统内实现端口转发
  6. figma下载_切换到Figma并在其中工作不必是火箭科学,这就是为什么
  7. 服务器怎么用光驱装系统教程,使用光驱重装系统详细教程
  8. 鱼骨图分析法实际案例_会用“鱼骨图”的项目经理无难题
  9. 能干什么_闲鱼流量系统能干什么?真的有用吗?
  10. java qq 界面_【Java】仿真qq尝试:聊天界面 响应用户输入
  11. CentOS7添加自定义系统服务
  12. 世界robocode机器人的四大运动方式分析
  13. Java入门 - 循环结构基础
  14. Python+Dlib库实现人脸合成
  15. 路由入口与vue布局入口
  16. 不用再捅了,首款新冠呼吸检测仪,吹口气,三分钟出结果。美国食药监局新闻中英对照注释
  17. 傻瓜教程:手把手教你解决多个应用实例(附代码、手绘图)
  18. windows10下使用minGW64 编译krita源码报错
  19. python逐步回归筛选变量_特征选择与逐步回归分析
  20. qml显示gif动画

热门文章

  1. python代码_如何使用 Sphinx 给 Python 代码写文档
  2. MySQLWorkbench里的稀奇事之timestamp的非空默认值
  3. Python 那些永远用不到的对象,我们称之为「垃圾」
  4. Python | 新手必会的 9 个 Python 技巧
  5. 用好这几个工具,能大幅提升你的 Git/GitHub 操作效率!
  6. 江苏涟水中学2021高考成绩查询,2021年涟水县高考状元名单资料,今年涟水县高考状元多少分...
  7. java xslt 数据转换_如何将xslt结果转换为Java对象?
  8. gis根据范围批量分开图斑_基于BIM-GIS技术的公路预防性养护研究
  9. 目前最常用的计算机机箱类型为_常用的计算机设备
  10. Deeplearnng.AI第四部分第一周、卷积神经网络