php endall(),从G_BEGIN_DECLS和 G_END_DECLS说起
今天开始正式研究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说起相关推荐
- 从G_BEGIN_DECLS和 G_END_DECLS说起
2019独角兽企业重金招聘Python工程师标准>>> 今天开始正式研究gedit的源码,第一次看c/c++的源码,有点吃力啊,坚持不懈,慢慢来. 在gedit.c文件中遇到了G_B ...
- GStreamer插件实列rockchipmpp
尽管这些年arm发展取得了不少的进步,不过对于音视频的编解码仍然心有余力不足,好在芯片厂家在SOC里面提供了硬件加速能力.善于发挥出芯片的能力,才能打造出完美的应用.今天我们一起来探索一下rk3568 ...
- 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 ...
- linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- ATK插件化开发:AtkPlug,AtkSocket
Table of Contents 介绍 接口: atk_plug_get_id () atk_socket_embed () AtkPlug例子 ta-plug.c ta-plug-accessib ...
- Glib学习笔记(1)
GLib学习笔记 一 Glib笔记1 以前主要是做C++,最近有个机会转到嵌入式的C,大部分用的是Glib/Gobject系统,前一周的样子把相关内容大致浏览了一遍,主要以reference Menu ...
- 转载]Linux Gstreamer and GST-OMX插件
原文地址:Linux Gstreamer and GST-OMX插件 作者:wuqiseu 1. Gstreamer基本介绍 Gstreamer是linux上的多媒体框架.如下所示: ...
- DBUS基础知识(非常全面)
DBus作为一个轻量级的IPC被越来越多的平台接受,用于进程间通信或进程与内核的通信. DBus进程间通信主要有三层架构: 1.底层接口层:主要是通过libdbus这个函数库,给予系统使用DBus的能 ...
- dbus-glib编程4:使用dbus-glib
dbus-glib是dbus底层接口的一个封装.本讲我们用dbus-glib做一个dus接口,并写一个客户程序. 1.接口描述文件 首先编写接口描述文件.我们要实现的连接的公共名是"org. ...
最新文章
- 基于问题导向与成果产出的教学模式:《大数据与城市规划》特色课程
- iOS 利用RunTime检测控制器是否销毁
- session的生命周期
- 如何查看linux系统的体系结构
- windows系统内实现端口转发
- figma下载_切换到Figma并在其中工作不必是火箭科学,这就是为什么
- 服务器怎么用光驱装系统教程,使用光驱重装系统详细教程
- 鱼骨图分析法实际案例_会用“鱼骨图”的项目经理无难题
- 能干什么_闲鱼流量系统能干什么?真的有用吗?
- java qq 界面_【Java】仿真qq尝试:聊天界面 响应用户输入
- CentOS7添加自定义系统服务
- 世界robocode机器人的四大运动方式分析
- Java入门 - 循环结构基础
- Python+Dlib库实现人脸合成
- 路由入口与vue布局入口
- 不用再捅了,首款新冠呼吸检测仪,吹口气,三分钟出结果。美国食药监局新闻中英对照注释
- 傻瓜教程:手把手教你解决多个应用实例(附代码、手绘图)
- windows10下使用minGW64 编译krita源码报错
- python逐步回归筛选变量_特征选择与逐步回归分析
- qml显示gif动画
热门文章
- python代码_如何使用 Sphinx 给 Python 代码写文档
- MySQLWorkbench里的稀奇事之timestamp的非空默认值
- Python 那些永远用不到的对象,我们称之为「垃圾」
- Python | 新手必会的 9 个 Python 技巧
- 用好这几个工具,能大幅提升你的 Git/GitHub 操作效率!
- 江苏涟水中学2021高考成绩查询,2021年涟水县高考状元名单资料,今年涟水县高考状元多少分...
- java xslt 数据转换_如何将xslt结果转换为Java对象?
- gis根据范围批量分开图斑_基于BIM-GIS技术的公路预防性养护研究
- 目前最常用的计算机机箱类型为_常用的计算机设备
- Deeplearnng.AI第四部分第一周、卷积神经网络