当前位置:  编程技术>其它
本页文章导读:
    ▪mint 下codeblocks 编译libapue      codeblocks很轻巧也很好用对于c/c++编写在linux下相对于eclipse.于是乎下了一个,由于是乎想写几个sample玩玩。于是乎拿<unix 高级环境编程> sample来测试。于是乎建了一个c++ project. <unix 高级.........
    ▪Python3 学习笔记 -- 继承      先上一个比较简单的单继承语法。在python3中,基类的构造函数不会被自动调用,需要手动调用,同样的方法也是这样,需要手动调用。可以使用类名称+init方法,也可以使用super语法进行调用.........
    ▪SQL Server 2005配置      1、打开SQL Server2005的SQL Server Configuration Manager 。除了VIA以外其他协议的状态置为已启用,然后重启服务。2、打开TCP/IP协议的设置。找到相关的IP对应的设置项目:“活动”置为“是.........

[1]mint 下codeblocks 编译libapue
    来源:    发布时间: 2013-11-15
codeblocks很轻巧也很好用对于c/c++编写在linux下相对于eclipse.
于是乎下了一个,由于是乎想写几个sample玩玩。于是乎拿<unix 高级环境编程> sample来测试。

于是乎建了一个c++ project.
<unix 高级环境编程>里的例子有个apue.h头文件。不是系统自带的。是作者自己写的几个util函数。
网上找编译apue.h头文件一大片。但是都是考来考去,不过核心的都差不多。不过有个方法是编译完
libapue.a静态库后,还需要在apute.h头文件尾巴加"error.c"。。完了拷贝error.c实现到目录。。
看完后。我惊了呆。。好吧。。这库还能这么用。。

既然libapue.a编译完后,apue.h里的函数声明在libapue.a都已经实现,当然包括err_xxx系列的。所以
在apue.h加"error.c"是画蛇添足。。这里不推荐此方法。。

我的环境是mint14下, IDE用的是 codeblocks. 方法中基本都有这么一个步骤:
先在这个网站 http://www.apuebook.com/src.tar.gz 下载tar.gz格式的源码包,然后解压至某个目录,比如说/home/xiaoguozi/下,然后进入目录apue.2e,把文件 Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/xiaoguozi/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk
如果用vim编辑的话,可以用 :1,%s/nawk/awk/g 替换字符窜

完了make, 过程中,还遇到了几个问题。(mint下,其他os不太清楚)

1: /usr/include/bits/timex.h:31:7:error: expect ':' , ',' , ';' , '}' or '__attribute__'   
 apue.2e/ipp/ipp.h中 #define status u.st 与 timex.h中的 status 冲突,更改 #define Status u.st

  

2:ARG_MAX 未定义

   在include/apue.h中加入 #define ARG_MAX 4096

   在threadctl/getenv1.c 加入 #include "../include/apue.h"

   在threadctl/getenv3.c 加入 #include "../include/apue.h"

完了之后,make应该就可以成功了

完了在codeblocks项目里引用刚编译完的库,有几个方法:
1)将编译完的库,头文件apue.h拷贝/usr/include,库文件libapue.a拷贝到/usr/lib下,这个是系统目录,gcc编译的时候会在这目录搜寻
2)在项目属性添加静态库引用
添加头文件:依次点击project->bulid options->Search directories,在该标签页中点击Compiler,单击Add按钮添加头文件路径
添加静态库路径:依次点击project->bulid options->Linker setting,在该标签页中点击Add按钮添加静态库路径。

如果之前你建的是c project的话,应该就可以顺利编译通过了,但是对于建立c++的project,仍然提示链接错误,找不到函数实现,
原因是libapue.a是c库,用g++编译的时候要引用c库的话,因为c++编译的时候会在函数加一些额外字符,所以当然会链接错误。
解决也简单的在函数库前加 extern "C",或者直接把apue.h用extern "C"包含,不清楚的补下相应知识。

加点额外的知识关于gcc/g++:
gcc和g++的区别

误区一:gcc只能编译c代码,g++只能编译c++代码
两者都可以,但是请注意:
1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。
2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

误区二:gcc不会定义__cplusplus宏,而g++会
实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。

误区三:编译只能用gcc,链接只能用g++
严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。

gcc和g++的区别 我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用 gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。



小果子 2013-01-04 20:23 发表评论

    
[2]Python3 学习笔记 -- 继承
    来源:    发布时间: 2013-11-15

先上一个比较简单的单继承语法。在python3中,基类的构造函数不会被自动调用,需要手动调用,同样的方法也是这样,需要手动调用。可以使用类名称+init方法,也可以使用super语法进行调用。在下面这个例子中,子类继承了基类的方法和字段。字段会在基类中初始化。

 

class BaseClass: def __init__(self): self.name = 'BaseClass' print('BaseCalss: Constructor called') def getname(self): print('BaseCalss: self name equals ' + self.name) class DerivedClass(BaseClass): def __init__(self): super().__init__() print('DerivedClass: Constructor called') if __name__ == '__main__': class1 = BaseClass() class1.getname() class2 = DerivedClass() class2.getname()

运行结果:

BaseCalss: Constructor called
BaseCalss: self name equals BaseClass
BaseCalss: Constructor called
DerivedClass: Constructor called
BaseCalss: self name equals BaseClass

 

子类也可以overwrite父类的方法,那么父类的方法就不会被调用,除非手动调用:

class BaseClass: def __init__(self): self.name = 'BaseClass' print('BaseCalss: Constructor called') def getname(self): print('BaseCalss: self name equals ' + self.name) class DerivedClass(BaseClass): def __init__(self): super().__init__() print('DerivedClass: Constructor called') def getname(self): print('self.name init value is ' + self.name) self.name = 'DerivedClass' print('DerivedClass: self name equals ' + self.name) if __name__ == '__main__': class1 = BaseClass() class1.getname() class2 = DerivedClass() class2.getname()

 

运行结果:

BaseCalss: Constructor called
BaseCalss: self name equals BaseClass
BaseCalss: Constructor called
DerivedClass: Constructor called
self.name init value is BaseClass
DerivedClass: self name equals DerivedClass

 

python不仅仅支持单继承,还支持多继承,字段和方法都可以被继承。在多继承super()只能代表继承的第一个父类,所以您在子类的构造函数中,不能单独使用super().__init__(), 那只是表示调用其中一个基类的构造函数。所以用super就不是那么好用了。还是要用会原来的类名+init方法来调用。

class BaseClass1: def __init__(self): self.name1 = 'BaseClass1_Name1' self.name = 'BaseClass1_Name' print('BaseCalss1: Constructor called') def getname1(self): print('BaseCalss1: self name1 equals ' + self.name1) def getname(self): print('BaseCalss1: getname called, name equal ' + self.name) class BaseClass2: def __init__(self): self.name2 = 'BaseClass2_Name2' self.name = 'BaseClass2_Name' print('BaseClass2: Constructor called') def getname2(self): print('BaseClass2: self name2 equals ' + self.name2) def getname(self): print('BaseCalss2: getname called, name equal ' + self.name) class DerivedClass2(BaseClass1, BaseClass2): def __init__(self): BaseClass1.__init__(self) BaseClass2.__init__(self) print('DerivedClass: Constructor called') if __name__ == '__main__': class1 = BaseClass1() class1.getname1() class2 = BaseClass2() class2.getname2() class3 = DerivedClass2() class3.getname1() class3.getname2() class3.getname()

运行结果:

BaseCalss1: Constructor called
BaseCalss1: self name1 equals BaseClass1_Name1
BaseClass2: Constructor called
BaseClass2: self name2 equals BaseClass2_Name2
BaseCalss1: Constructor called
BaseClass2: Constructor called
DerivedClass: Constructor called
BaseCalss1: self name1 equals BaseClass1_Name1
BaseClass2: self name2 equals BaseClass2_Name2
BaseCalss1: getname called, name equal BaseClass2_Name

 

我们可以看到,当两个基类有方法重名的时候,python3会按照您继承类的从左到右的顺序查找您调用的方法DerivedClass2(BaseClass1, BaseClass2)。在这个例子中,是先找BaseClass1,然后再找BaseClass2。

如果您的代码需要多层继承的话,可以参开多重继承的 Diamond Problem 问题。

class A1: def foo1(self): print("Call A1's foo1")class A2: def foo1(self): print("Call A2's foo1") def foo2(self): print("Call A2's foo2") class B1(A1,A2): passclass B2(A1,A2): def foo2(self): print("Call B2's foo2") class C(B1,B2): pass if __name__ == '__main__': class1 = C() class1.foo1() class1.foo2()

 

运行结果:

Call A1's foo1

    
[3]SQL Server 2005配置
    来源:    发布时间: 2013-11-15
1、打开SQL Server2005的SQL Server Configuration Manager 。
除了VIA以外其他协议的状态置为已启用,然后重启服务。
2、打开TCP/IP协议的设置。
找到相关的IP对应的设置项目:“活动”置为“是”;“已启用”置为“是”;“动态端口”无需理会。
IPALL对应的设置项目:无需理会


小王 2013-01-05 07:55 发表评论

    
最新技术文章:
▪修改月光博客网站中PHP常用正则表达式中出现...
▪js正则判断非法字符限制输入
▪通过正则表达式删除空行的方法
▪一个好用的正则匹配电话号手机号邮箱网址的...
▪JS 正则表达式用法介绍
▪几个小例子教你如何实现正则表达式highlight高...
▪如何实现正则表达式的JavaScript的代码高亮
▪js 玩转正则表达式之语法高亮
▪PHP中过滤常用标签的正则表达式
▪js 正则表达式学习笔记之匹配字符串
▪使用正则表达式匹配[***]样式的字符串
▪史上最详细的js日期正则表达式分享
▪php+正则将字符串中的字母数字和中文分割
▪正则表达式不区分大小写以及解决思路的探索...
▪正则替换换行符和把 br 替换成换行符
▪正则表达式匹配不包含某些字符串的技巧
▪匹配form表单中所有内容的正则表达式
▪正则表达式(括号)、[中括号]、{大括号}的区别...
▪正则表达式中的"g"是什么意思附件参数g的用...
▪浅谈正则表达式(Regular Expression)
▪Python正则表达式的七个使用范例详解
▪正则表达式提取img的src
▪常用的正则表达式集锦
▪使用正则表达式找出不包含特定字符串的条目...
▪js正则表达式中的问号几种用法小结
▪正则表达式概述 什么是正则表达式 .
▪ajax对注册名进行验证检测是否存在于数据库...
▪js正则解析URL参数示例代码
▪JS使用正则去除字符串最后的逗号
▪几种常见攻击的正则表达式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3