php endall(),从G_BEGIN_DECLS和 G_END_DECLS说起
今天開始正式研究gedit的源碼,第一次看c/c++的源碼,有點吃力啊,堅持不懈,慢慢來。
在gedit.c文件中遇到了G_BEGIN_DECLS和G_END_DECLS,平常搞C語言的東西,我個人幾乎沒這樣用過(怕是太菜了。。)遂順藤摸瓜,抽絲剝繭。(以下用G宏代替)
由宏定義聯(lián)想這兩個東西,例如#define PRINT printf("Hello World\n");在程序中可以直接使用PRINT輸出,G宏的形式很像宏定義啊。果真,上網(wǎng)一查,得到如下定義
//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,總之值不同,又發(fā)現(xiàn)在GCC下其值為1,它是long int型,按照此標識來用就行了。
如果定義了__cplusplus宏,則extern "C", 這是什么意思呢?指的是按照C語言的風格進行編譯等。鄙人才疏學淺,C風格和C++風格的區(qū)別是什么?例如test(int , int)C++支持重載,當編譯器對函數(shù)處理之后,得到的名字是_test_int_int,而在C語言中,得到的是test。應該看到區(qū)別了,這是C++專門為了調用C函數(shù)設計的。
有必要復習一下extern在C語言中的應用,extern我個人理解就是外部聲明,全局可調。我寫了一個函數(shù)extern test(int, int),則我在另一個C文件中調用test()即可。
總結
以上是生活随笔為你收集整理的php endall(),从G_BEGIN_DECLS和 G_END_DECLS说起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java多线程同步与死锁,廖雪峰Java
- 下一篇: java 手势识别,AndroidStu