JCOOP入门指南[01]

Posted on Thu, 08 Jul 2010 07:39:44 -1100

写一点关于JCOOP的入门指南,JCOOP最核心的部分是由一堆宏构成的,

能够简化C语言描述对象的过程,具体代码见sourceforge.net/projects/jcoop

下面是最简单的一个例子,

涉及到用JCOOP构造类的方法之一以及构造函数与析构函数的使用

因为这个例子非常简单,多的就不写了,直接看注释就好

[那个jc_oop.h要到上面的网址下载,另外最好用GCC来编译,MS那套东西我没测试过,Mingw肯定欧科的]

 
#include <stdio.h>                                                                                                     
#include "./include/jc_oop.h"

static void cry(){
	printf("baby is crying...\n");
}


CLASS(Baby)
	int age; //表示年龄的成员
	METHOD(void,cry)(void); //两个void分别对应返回值和参数
END_CLASS

CTOR(Baby) //构造函式
	printf("Baby constructor called ... \n");
	ASSIGN(age,1); //赋值
	CONNECT(cry,cry); //链接到指定的函式
END_CTOR

DTOR(Baby) //析构函式
	printf("Baby destructor called ... \n");
	UNASSIGN(age); //置零
	DISCONNECT(cry); //断开链接
END_DTOR

int main(){
	NEW(Baby,baby,NULL);
	printf("the baby's age is %d\n",baby->age);    
	baby->cry();
	DEL(Baby,baby);
	return 0;
}

运行时会打印如下的字符串

Baby constructor called ... 
the baby's age is 1
baby is crying...
Baby destructor called ... 

需要注意的是上面的Baby类是构造在堆上的,所以baby自然是一个指针

其在NEW时分配相应的内存,并初始化相应的值(构造函数),

在DEL时调用析构函数释放对应的内存.

从上面的代码不难发现,使用JCOOP不但可以形象的描述一个类,

而且简化了代码的编写,特别是涉及内存分配相关的部分.

 

 

 

在SlickEdit下使用Vala配置简介

Posted on Sun, 06 Jun 2010 13:07:02 -1100

在SlickEdit下使用Vala

    声明下,slickedit和vala的配合不是很好,因为没有官方的支持,而我又不怎么会Slick-C,只能凑合着用了,不过值得关注的是关键字的高亮还是可以支持的,另外图形化的调试也是可以的.不知道有人用过emacs配合vala没有,不知那个调试起来怎样.

    另外,目前测试发现,调试起来可以断点调试,可以单步调试,但不能从某个函数中跳出,只能再在外边设置一个断点.还有就是调试clutter时会有问题(c语言可以vala有问题,当然是win32环境)

    在slickedit中tools->option找language manager,添加一门新的语言vala,lexer应重新创建,其它选other c/c++.具体的关键字以及缩进等功能可以找到相应的选项,也可以直接修改

                C:\Documents and Settings\Administrator\My Documents\My SlickEdit Config\15.0.0\usr.vlx

    具体参考其它语言的vlx配置,另外vala的关键字和操作符的描述可在vala官网看到

 

下面记录的是在SlickEdit中创建新的项目类型时的配置

    编译连接选项

                valac --debug *.vala -o %rw/%rn.exe --pkg gtk+-2.0

    C源代码产生选项

                valac --ccode *.vala --pkg gtk+-2.0

    执行选项

                %rw/%rn.exe

    调试选项

                vsdebugio -prog %rw/%rn.exe

P.S. gkt+-2.0为gtk的库,*.vala可以换成%f表示仅编译当前的文件

书啊......多买点总不是坏事儿....

Posted on Sun, 16 May 2010 03:58:36 -1100

工作一年来买的最多的东西就是这个了,走的时候办起来也很麻烦,

不过感觉总是好的....

唯一有些杯具的是买了这么多实际看的只有一半左右[想比以前已经是很大的进步了]

图片

准确说来,这只是一部分,还有一部分放上去就不稳了......

 

书啊......多买点总不是坏事儿....

就是搬起来太累了点儿........

辞职真是件惬意的事情啊...

Posted on Thu, 06 May 2010 13:02:04 -1100

工作一年多了,各种各样的事情多多少少经历了一些,收获总是有,但却又不是很多.

两个月前,辞职报告就已经递了上去,老大似乎卡了一段时间,这让我爽也不爽了好久,

想起刚来这个鬼地方的时候,他们口口声声说要把握作为重点培养对象,但后来发现这话就是屁话!

 

        刚来的时候让我看下linux的东西,但一个部门16个技术人员,15个都是微软控!而我在大学里学得也不是这些东西,只得硬着头皮上.

        心想,这是考验我的吧,一定要好好整,弄出点名堂来![后来才发现对于linux新手,短时间内弄出点名堂不是很现实]

        于是接下来的一段时间疯狂的买书,啃书..........

        入门linux很是麻烦,部门里的人对linux的概念不是模糊的问题,简直是没有!如果我不说,尚不知大便和笨兔为何物!不过这样也好,初期的一段时间几乎没人搭理我,倒也轻松,但是压力却一点也不小,因为自己也不知道自己能做出来点啥.

        就这样又熬了相当长的一段时间,blablabla.......

        当我终于做出了点东西来的时候[用clutter写了一个两万多行的应用,里面还实现了立方体桌面的相当华丽的效果],却发现当前做 的这个项目要搁浅了,领导的领导的表态似乎是"恩,不错,做的不错,但是短时间内还不能投入市场,先放那儿吧!"\

         Phuket ! 就这样,被耍了半年多的时间!心想,新人么,被耍是正常的,别太计较就是了!!!

         后来,因为领导的领导突发奇想,想把我们的业务扩展到手机平台,然后又把我拉进这一项目,要说最悲哀,应该还是部门16个搞技术的,就我一个整J2ME,而且还是连JAVA都没学过,要从头学的那种.

         整linux的过程中,有段时间很是崩溃,但是到了J2ME还是很崩溃,要说J2ME比linux那块应该容易不少,但是时间也太紧迫了点,两个月多一点时间,让我这个连JAVA都不明白二手程序员[本人大学学电子信息的,即使是程序,更多也是verilog,vhdl之类的]边学习,边写出一个类似手机网游的商业应用[当然比手机网游(多为棋牌类)容易的多,但是网络通信以及有趣的游戏元素却都要具备].还很中用我似的对我说相信我的实力!

         也不知有多少个晚上两点以后睡的觉,失眠和写程序的时间大概一半一半吧,说实话,在这样一个城市,拿3k多的工资还熬夜工作的人应该不算多才对吧.

         在写J2ME的时候,玩了点花的,写了个MVC框架,虽然这个框架可以将数据和图形分离,但实际上代码量是增加了不少,以至于最初的版本几乎没啥实质的价值.

         后来部门又招了个新人来整我这一块,那家伙是软件学院培训出来的,写过点游戏,但一看就是那种很山寨的培训出来的JAVA游戏,而看了他的代码更多的也是

if,else写下来,连基本的继承和接口用的都不多.但是就是这么要命的一件事,那家伙看了我的程序后似乎很不屑,感觉我那种写法会增加代码量,不可取!好在我坚信他

不知何为设计模式,更不知mvc为何物,自己安慰一下吧.

        ............

        辞呈递上去两个月了,不让我走我也要走了,想想TNND到这家公司连个上岗培训都没有,也没有带我的师傅,一切全凭自学,真TMD可悲,不过中国的中小公司大多都如此吧,但是你开始别大放厥辞啊,说什么重点培养什么的......

        想想最搞笑的是不想把关系弄得很僵,在辞呈里写的都是些谦卑之词,其实本来想趁着要走的机会骂领导几句SB的,结果想想还是算了,自己装SB算了....

 

 

Visual SlickEdit 2010 破解方法

Posted on Thu, 06 May 2010 12:49:35 -1100

下面的文字转自Zhiwei.Li, 这哥们还是蛮强悍蛮无私的......

Linux版本
080784CD                 mov     eax, esi   改成  xor eax, eax
            也就是 文件 slickedit/bin/vs 的偏移 0×304CD 处 的 89 F0 改成  33 C0

windows版本
0040F750                 mov     eax, ebp  改成  xor eax,eax
            也就是 文件 SlickEditV15.0.0\win\vs.exe 的偏移0xEB50 处 的 8B C5 改成  33 C0

跟SlickEdit 2009类似,   都是通过查找      |== NOT FOR RESALE ==|     这个字符串找到 适当的函数

P.S.

     如果你手头没有方便的工具,那么别删除老版本的SlickEdit,因为它也可以进行16进制编辑的!

     更多要说的,

     SlickEdit对C/CPP的解析是比visual studio+visual assist要好的,这点试多了才会知晓.唯一不爽的就是大小写敏感,这一点很不方便.

     另外还比较了eclipse cdt,cdt 6.0以后的解析几乎完美,但就是不支持自动解析,非要按一个键才能代码补全.而且宏的解析比SlickEdit要好,SlickEdit需要预先配置宏定义才能正确解析.

     但是eclipse那个真的不敢恭维,总的来说,对于搞c/cpp的人来说,这是一个不可多得的工具!

   

ubuntu 10.04 LTS 初体验

Posted on Mon, 03 May 2010 12:30:41 -1100

哈哈,笨兔新的lts版终于出来了,五一期间体验了把,感觉还不错,其实自从8.04后感觉一直都不错........

1.悲剧的wubi安装,

这次的安装还是采用了最最SB的方式,wubi,但是安装起来却费了一番时间,主要是开始装了下,因为种种原因又卸载了,

然后grub就认不到再次安装的笨兔了........

只能从网上搜罗一堆关于grub的信息,自己想法子修复了[真没想到自己这次用wubi安装还这么悲剧]

修复后的grub应该有类似下面的文字

menuentry "unbuntu 10.04 LTS (on /dev/sda8)" {
 insmod ntfs
 set root='(hd0,8)'
 loopback loop0 /ubuntu/disks/root.disk
 set root='(loop0)'
 linux /boot/vmlinuz-2.6.32-21-generic root=/dev/sda8 loop=/ubuntu/disks/root.disk ro
 initrd /boot/initrd.img-2.6.32-21-generic
 boot
}

而一开始进不去的时候就在命令行把上面的东西输入一遍就行了,

进去后在把类似的文字加在grub.cfg文件中或者用简单的方法update-grub2然后reboot,当然你也可以去修改menu.lst

2.悲剧的无线网卡

broadcom的网卡默认驱动会有问题,能识别到,但是搜不到无线网络......

关键是我没有额外的网线了,再准确点说上网的密码也记不得了,只有一个tplink.............

悲剧的又要向别人借网线把那个bmwcl的kernel包给装上......

3.悲剧的intel集成显卡

原以为从9.10后intel的烂显卡会好一点,但是实际上并不是如此,虽然默认的驱动特效能打开了

但是用clutter这类库的时候总会有这样那样的问题,记得9.10上也是如此,这方面n卡的驱动做的不错,效果好安装也容易,

于是编译安装了最新版的intel的2d驱动,最新版的mesa.....

还是有问题........

偶然间把驱动给屏蔽掉,发现分辨率并没变小,只是特效开不了而已,但是clutter库的动画效果运行正常了......

这也太悲剧了点........

不过按照英特尔官方的站点有提供clutter和cairo的下载,感觉应该是能够支持的啊.......

唉,现在还没找到解决问题的办法,下次买本打死不买英特尔的集显了.........

 

 

 

 

 

 

 

 

爱因斯坦谜题的c语言解答

Posted on Tue, 16 Mar 2010 02:10:25 -1100

[旧文搬迁]

题目如下,
1、在一条街上,有5座房子,喷了5种颜色。 2、每个房里住着不同国籍的人 3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物 另外, 1、英国人住红色房子 2、瑞典人养狗 3、丹麦人喝茶 4、绿色房子在白色房子左面 5、绿色房子主人喝咖啡 6、抽Pall Mall香烟的人养鸟 7、黄色房子主人抽Dunhill香烟 8、住在中间房子的人喝牛奶 9、挪威人住第一间房 10、抽Blends香烟的人住在养猫的人隔壁 11、养马的人住抽Dunhill香烟的人隔壁 12、抽Blue Master的人喝啤酒 13、德国人抽Prince香烟 14、挪威人住蓝色房子隔壁 15、抽Blends香烟的人有一个喝水的邻居


问题是:谁养鱼?

 以下是c语言的解答

#include <stdio.h>
#include <stdlib.h>
enum Nat
{
    ENG,SWE,DEN,NOR,GER
};
enum Hou
{
    RED,GREEN,WHITE,YELLOW,BLUE
};
enum Pet
{
    DOG,BIRD,CAT,HORSE,FISH
};
enum Dri
{
    TEA,COFFEE,MILK,BEER,WATER
};
enum Cig
{
    PALLMALL,DUNHILL,BLENDS,BLUEMASTER,PRINCE
};
struct S//scence
{
    int *nat; //nationality
    int *hou; //house
    int *pet; //pet
    int *dri; //drink
    int *cig; //cigar
} ;
void Permute(int a[120][5]) //permutation process
{
    int i=0,j=0,r1,r2,r3,r4,r5;
    for (r1=0;r1<5;r1++)
    {
        for (r2=0;r2<5;r2++)
        {
            if (r2!=r1)
                for (r3=0;r3<5;r3++)
                {
                    if (r3!=r2&&r3!=r1)
                        for (r4=0;r4<5;r4++)
                        {
                            if (r4!=r3&&r4!=r2&&r4!=r1)
                                for (r5=0;r5<5;r5++)
                                {
                                    if (r5!=r4&&r5!=r3&&r5!=r2&&r5!=r1)
                                    {
                                        a[i][j++]=r1;
                                        a[i][j++]=r2;
                                        a[i][j++]=r3;
                                        a[i][j++]=r4;
                                        a[i++][j]=r5;
                                        j=0;
                                    }
                                }
                        }
                }
        }
    }
//printf("\n***枚举过程完成***\n\n");
    return ;
}
int NatPos(struct S s,enum Nat t) //get position by nationality
{
    int i;
    for (i=0;i<5;i++)
        if (s.nat[i]==t)
            return i;
    return -1;
}
int HouPos(struct S s,enum Hou t) //get position by house
{
    int i;
    for (i=0;i<5;i++)
        if (s.hou[i]==t)
            return i;
    return -2;
}
int PetPos(struct S s,enum Pet t) //get position by pet
{
    int i;
    for (i=0;i<5;i++)
        if (s.pet[i]==t)
            return i;
    return -3;
}
int DriPos(struct S s,enum Dri t) //get position by drink
{
    int i;
    for (i=0;i<5;i++)
        if (s.dri[i]==t)
            return i;
    return -4;
}
int CigPos(struct S s,enum Cig t) //get position by cigar
{
    int i;
    for (i=0;i<5;i++)
        if (s.cig[i]==t)
            return i;
    return -5;
}
int main()
{
    int a[120][5];
    struct S s;
    int r1,r2,r3,r4,r5,i;
    Permute(a); //get permuted array
    for (s.dri=a[0],r1=0;r1<120;s.dri+=5,r1+=1) //permute 5 rounds for scene
    {
        if (s.dri[2]==MILK) //condition required
            for (s.nat=a[0],r2=0;r2<120;s.nat+=5,r2+=1)
            {
                if (s.nat[0]==NOR&&s.dri[NatPos(s,DEN)]==TEA) //condition required
                    for (s.hou=a[0],r3=0;r3<120;s.hou+=5,r3+=1)
                    {
                        if (s.hou[NatPos(s,ENG)]==RED&&s.dri[HouPos(s,GREEN)]==COFFEE&&
                            (HouPos(s,GREEN)+1==HouPos(s,WHITE))&&
                            ((NatPos(s,NOR)==HouPos(s,BLUE)+1)||(NatPos(s,NOR)==HouPos(s,BLUE)-1)))
                            for (s.pet=a[0],r4=0;r4<120;s.pet+=5,r4+=1)
                            {
                                if (s.pet[NatPos(s,SWE)]==DOG) //condition required
                                    for (s.cig=a[0],r5=0;r5<120;s.cig+=5,r5+=1)
                                    {
//<----
//////////////////////////////////////////////////////////////////
  if (((CigPos(s,BLENDS)==DriPos(s,WATER)+1)||(CigPos(s,BLENDS)==DriPos(s,WATER)-1))&&
       ((PetPos(s,HORSE)==CigPos(s,DUNHILL)+1)||(PetPos(s,HORSE)==CigPos(s,DUNHILL)-1))&&
        ((CigPos(s,BLENDS)==PetPos(s,CAT)+1)||(CigPos(s,BLENDS)==PetPos(s,CAT)-1))&&
           s.dri[CigPos(s,BLUEMASTER)]==BEER&&s.pet[CigPos(s,PALLMALL)]==BIRD&&
           s.cig[HouPos(s,YELLOW)]==DUNHILL&&s.cig[NatPos(s,GER)]==PRINCE)
          {
                        switch (s.nat[PetPos(s,FISH)])
                        {
                               case ENG:printf("***英国人养鱼***\n");break;
                               case SWE:printf("***瑞典人养鱼***\n");break;
                               case DEN:printf("***丹麦人养鱼***\n");break;
                               case NOR:printf("***挪威人养鱼***\n");break;
                               case GER:printf("***德国人养鱼***\n");break;
                               default:printf("***解不存在***\n");break;
                        }
                        printf("\n此时具体情况如下");
                        printf("\n\n*****************\n");
                        printf(" 标号 1 2 3 4 5 \n");
                        printf("\n 国籍 ");
                        for (i=0;i<5;i++)
                        {
                               switch (s.nat[i])
                               {
                                   case ENG:printf("英国 ");break;
                                   case SWE:printf("瑞典 ");break;
                                   case DEN:printf("丹麦 ");break;
                                   case NOR:printf("挪威 ");break;
                                   case GER:printf("德国 ");break;
                                   default:printf("错误 ");break;
                               };
                       }
                     printf("\n\n 房屋颜色 ");
                     for (i=0;i<5;i++)
                     {
                              switch (s.hou[i])
                              {
                                   case RED:printf("红色 ");break;
                                   case GREEN:printf("绿色 ");break;
                                   case WHITE:printf("白色 ");break;
                                   case YELLOW:printf("黄色 ");break;
                                   case BLUE:printf("蓝色 ");break;
                                   default:printf("错误 ");break;
                              };
                     }
                    printf("\n\n 宠物 ");
                    for (i=0;i<5;i++)
                    {
                             switch (s.pet[i])
                             {
                                   case DOG:printf("狗 ");break;
                                   case BIRD:printf("鸟 ");break;
                                   case CAT:printf("猫 ");break;
                                   case HORSE:printf("马 ");break;
                                   case FISH:printf("鱼 ");break;
                                   default:printf("错误 ");break;
                             };
                    }
                   printf("\n\n 饮品 ");
                   for (i=0;i<5;i++)
                  {
                             switch (s.dri[i])
                             {
                                    case TEA:printf("茶 ");break;
                                    case COFFEE:printf("咖啡 ");break;
                                    case MILK:printf("牛奶 ");break;
                                    case BEER:printf("啤酒 ");break;
                                    case WATER:printf("水 ");break;
                                    default:printf("错误 ");break;
                             };
                   }
                  printf("\n\n 香烟 ");
                  for (i=0;i<5;i++)
                  {
                             switch (s.cig[i])
                             {
                                    case PALLMALL:printf("帕玛 ");break;
                                    case DUNHILL:printf("杜希尔 ");break;
                                    case BLENDS:printf("布莱登 ");break;
                                    case BLUEMASTER:printf("布鲁玛 ");break;
                                    case PRINCE:printf("布里斯 ");break;
                                    default:printf("错误 ");break;
                             };
                    }
                    printf("\n\n*****************\n\n");
       }
                                    }
                            }
                    }
            }
    }
    return 0;
}