Lyrics--老男孩片尾曲
SlickEdit完美解析Qt4

OOC-GCC 简介

pingf posted @ Tue, 25 Jan 2011 05:08:08 -1100 in 未分类 , 3137 readers

OOC-GCC 概述

 

下载地址

http://code.google.com/p/ooc-gcc/downloads/list

 

其实这还是我对用C语言进行OO方式编程的一些尝试,最早的时候我在SF建了一个叫JCOOP的项目,后来搬到GOOGLE CODE

 

不过随着不断的改进,也对OO有了进一步的理解,

 

在这里先谈一下现在我对OO的理解,

 

所谓OO,本质是对象驱动型编程模式,其核心在于抽象,并将代码封装使之更易于复用.

 

所以说你用结构体来抽象描述某种事物并不意味着你的代码就不是OO的,所以说用C也是可以写出OO的代码的.

 

有人或许会更仔细的区分OO和OB,认为只有支持了多态,RTTI这些儿玩意儿的才是OO,其它的只能是OB

 

[※O→oriented,B→based]

 

我不想去争论这些没有太大意义的概念,因为C语言本身不是OO的语言.

 

不过话说回来,计算机的执行过程在逻辑上都本质是过程化的,因为汇编是过程的,机器码也是过程的.

 

而那些OO的语言只不过是编译器帮助完成了一些迷惑性的工作,帮你完成了内存分布,访问控制等的跑龙套的活而已.

 

无论何种类型的语言,执行过程都会遵循一定的顺序,所以说像C这类语言骨子里并不输给CPP,JAVA,

 

反倒是一些很高级的语言,引入了过多的语法糖,深入学习后总会感到有些瑕疵.

 

下面言归正传,

 

用C去模拟OO[这里说的OO包括OB和OO,是指一种思想,从对象入手的编程方式],首先要模拟的就是其最核心的东西.

 

虽然Ruby,CPP的技巧繁多,但依我现在来看,OO最重要的东西不是多态这些,而是如何去设计一个类,以及如何区别其他类.

 

本质上来说就是类的结构设计,类的构造与析构,如何调用类的成员.

 

对于用C模拟OO来说,类结构自然就是struct,普通成员依旧是普通成员,方法就是函数指针.至于虚函数与否,就是指向的问题了.

 

在目前的OOC-GCC中,通过宏class...eclass来定义一个类,通过ctor...ector和dtor...edtor宏来完成构造和析构.

而调用的时候则要用到new...del宏以及ini...fin宏,如果类在堆上,使用new...del,如果类在栈上,使用ini...fin.

 

至于继承的问题,用struct当然是struct中套struct了,而类型系统以及类型的转换,额外动手写是必须的,不过一种比较好的思路是

 

用union来包含不同的类型,并以一个变量来区分不同的类型,目前还没有弄这一块,因为个人觉得这样做太冗杂了.

 

OO本来就是简化编程的,弄得复杂了就不好了.

 

在最近的尝试中,还试着来模拟foreach这样的行为,但是目前的实现需要他typeof这种类别的关键字的支持[或者__typeof__类似的]

 

下面举一个Iterator的例子,当然这个Iterator和别的语言的必须是有所不同的.

 

假定我们要构造一个描述集合的类B,一个描述元素的类N.

 

要使用我这里的Iterator,只需让B包含一个IterationBase[或用typedef后的IBase],让N包含一个IterationNode[INode]

 

具体的类,以及构造与析构如下

 

//类声明

class(B)
    IBase ibase;
eclass

//构造

ctor(B)
    ini0(IterationBase,&this->ibase);
ector

//析构

dtor(B)
    emptyzs
edtor

//////////////////

//类声明

class(N)
    INode inode;
    //这里v用来保存实际测试用的数据
    int v;
eclass

//构造

ctor(N)
    ini0(IterationNode,&(this->inode));
    this->v=(int)param;
ector

析构

dtor(N)
    emptyzs
edtor

 

下面给出测试用的main函数

int main (int argc, char *argv[])
{
     //声明部分

    Iterator itor;

    ini0(Iterator,&itor);

    N *n1=NULL,*n2=NULL,*n3=NULL,*n4=NULL;

    n1=new(N,(void *)111);

    n2=new(N,(void *)112);

    n3=new(N,(void *)113);

    n4=new(N,(void *)114);

    B *b;

    b=new0(B);


    //插入

    //

    //将n1..n4绑定到b,

    //注意append前两个是不需要next的

    //

    //第一次插入无论用append或prepend

    //都会使base中的指针指向插入的node

    itor.append(&b->ibase,&n1->inode);

    //以后每次的append或prepend都是针对

    //当前base中的cur指针的

    itor.append(&b->ibase,&n2->inode);

    //这里想要在整个base的尾部插入

    //所以后面的每次插入都需要next一下

    itor.next(&b->ibase);

    itor.append(&b->ibase,&n3->inode);

    itor.next(&b->ibase);

    itor.append(&b->ibase,&n4->inode);

    //

    //foreach遍历

    N *np=NULL;

    //哈哈 foreach 遍历 !

    foreach(np,b)

        printf("--%d",np->v);

    eforeach

    printf("\n");

    //反着再遍历一遍 !

    foreach_rev(np,b)

        printf("--%d",np->v);

    eforeach

    //

    //释放堆内存

    del0(N,&n1);

    del0(N,&n2);

    del0(N,&n3);

    del0(N,&n4);

    del0(B,&b);

    return(0);
}

 

正确的输出是

--111--112--113--114
--114--113--112--111

[※最后注明一下,OOC-GCC从名字上就能看出是针对GCC的,用C++的编译器肯定无法编译的

如果是其他纯C的编译器[最好支持C99扩展的],可能需要稍微修改一些,但量不会很大]

 

Avatar_small
纵横天下 said:
Wed, 26 Jan 2011 13:56:40 -1100

貌似不错呢,如果GObject引入了你这个东东,不知道会有什么新改观!

Avatar_small
纵横天下 said:
Wed, 26 Jan 2011 13:57:41 -1100

@纵横天下: 只是。。。代码包竟然是RAR格式……

Avatar_small
pingf said:
Fri, 28 Jan 2011 05:06:50 -1100

@纵横天下:
我一直不是真正的*nix控,
我这个东西是在win下写的,所以用RAR很正常吧...
不过只要是gcc应该都可以编译的,因为我没有用win下专用的api,也不喜欢用...
如果从大小上说貌似lzma算法的小点,不过google空间够大了[就我这点宏而言]
如果是Linux下现在都有解压的工具啊,也是一键解压的吧,好像需要装个rar的扩展
[别说你习惯shell命令行,那东西会逼我撞墙....
不是不用,实在是懒,懒得敲键盘,懒得记命令,而且老忘,知道那是怎么回事儿就可以了]
另说GObject我觉得它是为了完整的模拟OO机制,
我这个最初是为了方便写OO的代码,初衷不同.
或者说我这个目前本质上是一个模板而已,
也就是说你一行行写出来typedef struct{}.....其实是一样的,估计还有不少人喜欢一行一行写的...
当然我是很希望GObject那帮疯子能接纳我的东西,呵呵...
现在正在琢磨着通过脚本来完成类的定义,这样所有的OO的机制都没问题的,就是调用起来可能会有些怪异...

Avatar_small
纵横天下 said:
Wed, 02 Feb 2011 05:19:12 -1100

@pingf:
【其实file-roller可以自动装unrar】
你可以把你的设计发到 (邮件列表)gtk-devel@gnome.org ,看看GObject那帮疯子会不会接受呢……
你的设计很不错哈!

Avatar_small
纵横天下 said:
Wed, 02 Feb 2011 06:12:48 -1100

嗯弄错了,是 gtk-devel-list@gnome.org

Avatar_small
纵横天下 said:
Thu, 24 Mar 2011 17:28:46 -1100

再次留言。。gcc有typeof关键字支持

Avatar_small
pingf said:
Fri, 25 Mar 2011 03:08:32 -1100

@纵横天下:
我知道啊,这是C99的标准扩展,我这个版本的模拟也用到了,我文中的意思是在C99前的模式下可能无法用而已....

Matthew Wade said:
Fri, 07 Aug 2026 04:50:37 -1100

西宮市で家族葬や一日葬を検討する方に向けて、それぞれの特徴や費用の考え方、葬儀社を選ぶときに確認しておきたいポイントを紹介します。 西宮市 葬儀社

-

-

-


-

-

-

西宮市で葬儀社を探す際に役立つ情報を紹介。葬儀プランの種類や費用、見積もりで確認したい項目など、安心して依頼するためのポイントを解説します。 西宮市 葬儀社

-

-

-


-

-

-

西宮市で葬儀社を比較するときのポイントを紹介します。料金だけでなく、葬儀プランやスタッフの対応、アフターサポートなどを確認して選びましょう。 西宮市 葬儀社

-

-

-


-

-

-

西宮市で費用を抑えながら葬儀を行いたい方へ。家族葬や一日葬などのプランを選ぶ際のポイントや、見積もりで確認すべき費用を解説します。 西宮市 葬儀社

Matthew Wade said:
Thu, 13 Aug 2026 02:12:15 -1100

本編フル動画を楽しみたい方に向けて、視聴方法や注目ポイントをわかりやすく紹介します。 本編フル

-

-

-

-

-


-

-

-

-

-

本編フルを探している方へ、作品をより楽しむための視聴ポイントやチェックしたい情報を紹介します。 本編フル

-

-

-

-

-


-

-

-

-

-

AVメーカー【SODクリエイト】の作品情報を専門にまとめたサイト。人気作品や注目作品などを分かりやすく紹介します。 AVメーカー【SODクリエイト】作品専門まとめサイト

-

-

-

-

-


-

-

-

-

-

本編フル動画の魅力や見どころを知りたい方に向けて、視聴前にチェックしたいポイントをわかりやすく解説します。 本編フル

-

-

-

-

-


-

-

-

-

-

本編フルの内容を楽しみたい方必見。作品の見どころや視聴時に注目したいポイントを詳しく紹介します。 本編フル

Matthew Wade said:
Sat, 15 Aug 2026 01:46:44 -1100

Please let me know if you’re looking for a article author for your weblog. You have some really good posts and I believe I would be a good asset. If you ever want to take some of the load off, I’d love to write some articles for your blog in exchange for a link back to mine. Please send me an email if interested. Thanks! あくめくん

Matthew Wade said:
Thu, 20 Aug 2026 00:45:13 -1100

既婚者マッチングの特徴や利用方法を紹介。既婚者同士だからこそ理解しやすい悩みや価値観を共有できる出会いを探しましょう。 既婚者マッチング

-

-

-

-

-


-

-

-

-

-

【無料エロ漫画】を探している方に向けて、話題の作品や読みやすいマンガ情報を紹介。作品の特徴や魅力をチェックして、お気に入りの一作を見つけよう。 【無料エロ漫画】

-

-

-

-

-


-

-

-

-

-

【フル漫画無料!!】で楽しめる話題の漫画や作品の魅力を紹介。無料で漫画を読む際のポイントやおすすめの楽しみ方を詳しく解説します。 【フル漫画無料!!】

-

-

-

-

-


-

-

-

-

-

【最新フル漫画free】で話題の漫画作品を探す方へ、作品情報や読み方をわかりやすく紹介。気になる漫画をチェックできます。 【最新フル漫画free】

-

-

-

-

-


-

-

-

-

-

素人エロ動画に関する話題や作品の特徴を紹介。人気の傾向や楽しみ方をチェックして、自分に合ったコンテンツを探せます。 素人エロ動画

-

-

-

-

-


-

-

-

-

-

同人エロ漫画の作品情報やジャンル、魅力などを紹介。さまざまな同人作品の特徴をチェックしながら、自分に合った作品を探せるガイドです。 同人エロ漫画

-

-

-

-

-


-

-

-

-

-

素人無料動画に関する情報をわかりやすく紹介。注目されている動画の特徴や楽しみ方、関連コンテンツをチェックして、自分に合った動画を探せます。 素人無料動画

-

-

-

-

-


-

-

-

-

-

同人エロマンガの特徴や魅力、作品の探し方を紹介。多彩なジャンルから自分に合った作品を見つけるためのポイントを詳しく解説します。 同人エロマンガ

-

-

-

-

-


-

-

-

-

-

素人エロ動画に関する話題や作品の特徴を紹介。さまざまなジャンルの魅力をわかりやすくチェックできます。 素人エロ動画

-

-

-

-

-


-

-

-

-

-

素人エロ動画Loverに関する情報を紹介。話題の動画や作品の特徴をチェックしながら、気になるコンテンツを探せます。 素人エロ動画Lover

-

-

-

-

-


-

-

-

-

-

エロ動画城【素人館】で楽しめる素人エロ動画を紹介。話題の作品や人気コンテンツをチェックして、お気に入りを探せます。 エロ動画城【素人館】

-

-

-

-

-


-

-

-

-

-

シコレビューで話題の動画や出演女優について紹介。気になる作品情報や女優名をチェックして、気になる動画を見つけよう。 シコレビュー【あのエロ動画に出演する女優名は何?】

-

-

-

-

-


-

-

-

-

-

エロ動画まとめ「3150!(サイコー)」の人気コンテンツを紹介。話題の動画や注目作品をチェックして、お気に入りを探せます。 エロ動画まとめ「3150!(サイコー)」

-

-

-

-

-


-

-

-

-

-

【無料立読みフル漫画】で話題の作品をチェック。無料で読める漫画の魅力や作品情報をわかりやすく紹介します。 【無料立読みフル漫画】

Matthew Wade said:
Sat, 22 Aug 2026 21:22:31 -1100

新人・デビュー作品を中心に、話題のAV動画をまとめて紹介。新人女優のプロフィールや作品情報などをチェックできます。 新人・デビュー専門!AV動画まとめサイト

-

-

-

-

-

--------------------------------------------------------------------------------------------

-

-

-

-

-

熟女専門のAV動画まとめサイト。大人の魅力を楽しめる作品を厳選して紹介し、気になる動画を見つけやすくまとめています。 熟女専門!AV動画まとめサイト

Matthew Wade said:
Sun, 06 Sep 2026 00:40:55 -1100
【本編フル】で話題の動画をチェック。気になる内容や注目シーン、見どころをわかりやすく紹介します。 【本編フル】
-
-
-
-
-

-
-
-
-
-
Comic Loungeは、同人マンガの作品情報を探せるサイトです。気になる作品や作家をチェックして、あなた好みのマンガを見つけよう。 Comic Lounge
-
-
-
-
-

-
-
-
-
-
【本編フル】の動画内容を詳しく紹介。注目ポイントや見どころをチェックして、話題の動画を楽しみましょう。 【本編フル】
-
-
-
-
-

-
-
-
-
-
同人漫画の魅力やジャンル、作品の楽しみ方について詳しく紹介。自分に合った作品を見つけるためのポイントも解説します。 同人漫画
-
-
-
-
-

-
-
-
-
-
【本編フル】で注目されている動画の内容や見どころを紹介。話題のポイントをわかりやすくまとめています。 【本編フル】
Matthew Wade said:
Thu, 10 Sep 2026 01:28:53 -1100

新作&デビュー作品の最新情報をまとめて紹介。注目の作品や出演者情報をチェックしながら、気になる作品を見つけよう。 新作&デビューAVまとめ

-

-

-

-


-

-

-

-

おすすめエロ動画をまとめて紹介。人気ジャンルや話題の作品を探している方に向けて、見つけやすく整理しています。 おすすめエロ動画まとめ

-

-

-

-


-

-

-

-

素人エロ動画GIFを探している方に向けて、話題のGIF動画や関連コンテンツをまとめて紹介します。 素人エロ動画GIF

-

-

-

-


-

-

-

-

最新の素人動画に関する情報を紹介。話題のコンテンツや注目ポイントをチェックして、自分に合った動画を探そう。 最新の素人エロ動画

-

-

-

-


-

-

-

-

FANZA独占動画をまとめて紹介。注目の独占作品を探しやすく整理し、気になる動画をチェックできます。 FANZA独占動画まとめ

-

-

-

-


-

-

-

-

ニューシロウト!に登場する素人動画の女優名が気になる方へ。出演者情報や作品の特徴、確認方法などをわかりやすく紹介します。 ニューシロウト!あの素人動画の女優名は?

-

-

-

-


-

-

-

-

最新VR動画をまとめて紹介。話題のVR作品や注目コンテンツをチェックしながら、気になる動画を見つけられます。 最新VR動画まとめ

-

-

-

-


-

-

-

-

人気エロ同人マンガの特徴や作品選びのポイントを紹介。ジャンルや作風の違いを比較し、自分に合う作品を探すための情報をまとめます。 人気エロ同人マンガ

-

-

-

-


-

-

-

-

人気VR研究所では、VRの最新情報や話題のコンテンツ、注目作品などを詳しく紹介。VRの魅力をわかりやすく解説します。 人気VR研究所

-

-

-

-


-

-

-

-

エロ漫画の特徴や魅力、作品を楽しむためのポイントをわかりやすく紹介。ジャンルや表現の違いにも触れながら解説します。 エロ漫画

-

-

-

-


-

-

-

-

ゴールデンバズーカについて詳しく解説。基本情報や特徴、魅力、楽しみ方などをわかりやすく紹介します。 ゴールデンバズーカ

Matthew Wade said:
Fri, 11 Sep 2026 03:05:48 -1100

エロ同人誌の特徴やジャンル、作品を楽しむ際のポイントについて詳しく紹介。自分に合った作品を見つけるための基礎知識を解説します。 エロ同人誌

Matthew Wade said:
Thu, 17 Sep 2026 21:29:48 -1100

エロフルでエロい動画をフルで楽しみたい方へ。さまざまな動画コンテンツを見つけやすくまとめ、気になる作品をチェックできます。 エロフル!エロい動画をフルでお届けします!

-

-

-

-

-


-

-

-

-

-

raw漫画保管庫について、漫画RAWの保存や閲覧に関する基本情報をわかりやすく解説。利用時に知っておきたいポイントも紹介します。 raw漫画保管庫

Matthew Wade said:
Sun, 27 Sep 2026 08:33:39 -1100

女優コードについて、基本的な意味や検索時に知っておきたい情報をわかりやすく解説。関連するコード情報の見方も紹介します。 女優コード

-

-

-

-

-


-

-

-

-

-

エロ同人サーチについて、同人作品を探す際の検索方法や基本的な使い方をわかりやすく解説。作品検索のポイントも紹介します。 エロ同人サーチ

Matthew Wade said:
Tue, 29 Sep 2026 21:26:44 -1100

既婚者マッチングアプリの特徴や基本的な使い方を解説。サービスを比較するときのポイントや利用前に確認したい点も紹介します。 既婚者マッチングアプリ

Matthew Wade said:
Sun, 04 Oct 2026 09:20:34 -1100

「エロ動画」に関する基本情報を紹介。動画を探す際に知っておきたい安全性やプライバシー、年齢確認などのポイントをわかりやすく解説します。 「エロ動画」

Matthew Wade said:
Sun, 04 Oct 2026 09:20:45 -1100

「エロ動画」を利用する際に確認したい安全対策やプライバシー保護、年齢確認などの基本ポイントをわかりやすく紹介します。 「エロ動画」

Matthew Wade said:
Sun, 04 Oct 2026 09:21:12 -1100

「エロ動画」を探すときに役立つ基本情報を紹介。安全性や個人情報、サイト利用時に確認したいポイントを詳しく解説します。 「エロ動画」


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter