![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
语言基础
长安小新
你为什么就不坚持下去。现在不管是摆地摊还是做开发,你都给我坚持下去。你不要今天摆地摊,遇到了城管,你明天又去当厨师。你当厨师你又觉得油烟对身体有害,又去干出租车司机,不要转来转去。人家的时间都用在了努力,而你的时间却用在了选择,当你将放弃当作一种习惯,你一辈子也不会有出息。
韩老师告诉我们说,成功其实也不难,只要树立一个目标,不需要你是一个很强的人,不需要你很高智商,不需要你是千里马,你只要像老黄牛一样,每天哪怕做一点点,往目标前进一点点,你就会成功。可是成功又很难,因为在通往成功的路上,很少人能够坚持下来,在坚持的过程中,很多人都选择了放弃“
展开
-
C语言为什么不支持重载,而C++支持
<br /><br />如果 C++程序要调用已经被编译后的 C 函数,该怎么办?<br />假设某个 C 函数的声明如下:<br />void foo(int x, int y); <br />该函数被 C 编译器编译后在库中的名字为_foo,而 C++编译器则会产生像_foo_int_int<br />之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能<br />直接调用 C 函数。C++提供了一个 C 连接交换指定符号 extern“C”来解决这个问题。<br />例如:<原创 2010-08-06 15:29:00 · 810 阅读 · 0 评论 -
help cscope (3)
<br /><br />本节所用命令的帮助入口:<br />:help cscope<br />在前面的文章中介绍了利用ctags生成的tag文件,跳转到标签定义的地方。但如果想查找函数在哪里被调用,或者标签在哪些地方出现过,ctags就无能为力了,这时需要使用更为强大的cscope。<br />Cscope具有纯正的Unix血统,它最早是由贝尔实验室为PDP-11计算机开发的,后来成为商用的AT&T Unix发行版的组成部分。直到2000年4月,这个工具才由SCO公司以BSD license开源发行。<b转载 2010-10-25 23:21:00 · 536 阅读 · 0 评论 -
Cscope ---4
<br />Cscope 是一个类似 ctags 的工具。 你可以把它想作是超过频的 ctags,因为它功能比<br />ctags 强大很多。 在 Vim 里,通过 cscope 查询结果来跳转就象跳转到其他的标签完<br />全一样; 它被保存在标签堆栈里。这样你就可以象使用 |tags| 一样在函数等等之间便捷<br />的跳转。<br /><br />1. Cscope 简介 |cscope-intro|<br />2. Cscope 相关命令原创 2010-10-25 23:26:00 · 791 阅读 · 0 评论 -
JNI
<br /><br />JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。<br />目录定义设计目的书写步骤简要使用例子调用中考虑的问题对JAVA传入数据的处理软件开发展开编辑本段定义使用java与本地已编原创 2010-11-25 23:27:00 · 477 阅读 · 0 评论 -
回调函数
<br />回调函数<br />回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。<br />目录回调函数实现的机制是为什么要使用回调函数简单的回调函数实现展开编辑本段回调函数实现的机制是(1)定义一个回调函数; (2)提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;转载 2010-11-25 23:39:00 · 436 阅读 · 0 评论 -
g_idle_add函数介绍
我们知道glib提供了一个名为g_idle_add的函数,这个函数的功能很容易理解:增加一个空闲任务,让应用程序在空闲时执行指定的函数。这种机制非常有用,如果没有这种机制,很多事情将非常麻烦。它的功能虽然简单,但并不是所有人都知道如何充分发挥它的潜力,这里说说它的几个主要用途吧。 1. 在空闲时执行低优先级任务。有的任务优先级比较低,但费耗时间比较长,像屏幕刷新等操作,我们不希望它阻转载 2013-08-03 15:17:49 · 5591 阅读 · 0 评论 -
C语言中 可变参数使用
//修改网友的小例子#include #include #include /*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/int demo( char *, ... );void main( void ){ demo("DEMO", "This", "is", "a", "demo!", "");}int demo( char *msg, ... )原创 2013-08-27 13:57:21 · 640 阅读 · 0 评论 -
字符集描述-宽字符描述
字符串基础 - ASCII, DBCS, Unicode所有的字符串类都起源于C语言的字符串,而C语言字符串则是字符的数组。首先了解一下字符类型。有三种编码方式和三种字符类型。第一种编码方式是单字节字符集,称之为SBCS,它的所有字符都只有一个字节的长度。ASCII码就是SBCS。SBCS字符串由一个零字节结尾。第二种编码方式是多字节字符集,称之为MBCS,它包含的字符中有单字节长的字转载 2013-09-10 17:46:40 · 885 阅读 · 0 评论 -
static_cast 和 dynamic_cast 的区别
static_cast一般用来将枚举类型转换成整型,或者整型转换成浮点型。也可以用来将指向父类的指针转换成指向子类的指针。做这些转换前,你必须确定要转换的数据确实是目标类型的数据,因为static_cast不做运行时的类型检查以保证转换的安全性。也因此,static_cast不如dynamic_cast安全。对含有二义性的指针,dynamic_cast会转换失败,而static_cast却直接且粗转载 2013-10-05 17:45:11 · 825 阅读 · 0 评论 -
C++中的位拷贝和值拷贝(深拷贝和浅拷贝)
<br /><br />为了便于说明我们以String类为例:<br />首先定义String类,而并不实现其成员函数。<br /> Class String{<br />public:<br /> String(const char *ch=NULL);//默认构造函数<br /> String(const String &str);//拷贝构造函数<br /> ~String(void);<br /> String &operator=(const String &str);//赋值转载 2010-08-06 17:40:00 · 714 阅读 · 0 评论 -
C++ 中const成员函数的使用
//对于const成员函数,"不能修改类的数据成员,不能在函数中调用其他不是const的函数",这是由const的属性决定的//请看下面一个完整的例子,然后我再作一些说明。 #include ; #include ; using namespace std; class Student { public: Student() {} Student( c原创 2013-10-09 17:39:27 · 793 阅读 · 0 评论 -
内联函数和宏的区别(内联和C++没有必然联系)
函数开销:函数调用是有开销的,开销是在函数调用的时候,必须 把当前执行的代码顺序切换到被调用函数的地址,地址跳换之前需要保存现场,被调函数执行完之后要恢复现场,并按照原来的顺序继续执行代码,所以函数调用是有一定的时间和空间的开销,所以函数调用是有开销的。宏调用:宏调用是在预处理阶段将代码展开,所以宏调用是没有函数调用那些开销的,但是宏调用是有些不尽人意的地方:1.原创 2013-10-09 11:26:14 · 905 阅读 · 0 评论 -
C++ 为什么要虚析构函数
class Father;class Son : public class Father;在上述条件下,可以实现多态Father* pointer = new Son;当释放时delete pointer;在这个时候,如果,father类和son类的析构是虚函数才能够正确释放。虚析构函数析构函数的工作方式是:最底层的派生类(most derived class)的析构函数最原创 2013-10-09 18:00:54 · 891 阅读 · 0 评论 -
由C++ bool类型想到的一些事情
Wiki上说:和C语言相比,C++引入了更多的特性,包括:陈述性声明,类似函数的强制转型,new/delete操作符,布尔类型,参考类型,默认参数,函数重载,命名空间,类型(包括所有和类型相关的特性,如继承、成员函数、虚函数、抽象类型和构造函数),操作符重载,模板,::操作符,异常处理和运行时期识别。发现C语言竟然没有bool类型。不对啊,在C语言中我们没少使用bool操作??? 这到底是原创 2013-10-10 16:21:37 · 925 阅读 · 0 评论 -
饿汉式与懒汉式的区别
<br />http://topic.csdn.net/u/20071111/14/d9cbf766-765a-4315-a49f-be7888d1308b.html原创 2010-10-26 23:12:00 · 518 阅读 · 0 评论 -
查看源代码的ctags,cscope(1)
<br /><br />Vi大家都很熟悉,某些情况下它是我们在Linux下唯一可用的文本编辑器。其实我们平时所指的VI其实是VIM(ViImproved,VI增强版)。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。VIM简单易用,只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法。对于Linux下的C/C++的程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择。<br />VI的使用方法这里就不罗嗦了,本文假设大家转载 2010-10-25 23:18:00 · 532 阅读 · 0 评论 -
如何将一个整数转换成字符串
<br />用倒序赋值的办法,将整数转换为字符串:<br /> <br />#include <stdio.h>#define LEN 10int main(){ char p[10] = {0}; char*str = p; int test = 12345; str+=8; while (test){ *str -- = test % 10 + '0';原创 2010-10-15 10:10:00 · 3806 阅读 · 1 评论 -
全局函数要加:: 来区分于局部函数
<br /><br />注意并不是两个函数的名字相同就能构成重载。全局函数和类的成员函数同名不算<br />重载,因为函数的作用域不同。例如: <br /> void Print(...); <br /> class A <br /> {... <br /> <br />2001<br />// 全局函数 <br />void Print(...);// 成员函数 <br />Page 58 of 101<br />高质量 C++/C 编程指南,v 1.0<br /> } <br /> 不 论原创 2010-08-06 15:32:00 · 609 阅读 · 0 评论 -
虚函数,纯虚函数相关
<br />虚函数和纯虚函数不是一个东西!!!!---------------------------------------虚函数和纯虚函数 在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说,它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。 那么,什么是虚转载 2010-08-06 16:13:00 · 343 阅读 · 0 评论 -
虚函数和纯虚函数 是动态联编的
<br />虚函数是动态联编的,只有到运行的时候才决定值调用父类的函数还是调用子类的同名函数。<br />子类的虚函数前面也应该加上关键词virtual·······<br /> <br />纯虚函数也是动态联编的,不可能调用父类的纯虚函数。<br />纯虚函数实现了一个操作流程,具体实现是在子类中完成的。原创 2010-08-06 16:21:00 · 617 阅读 · 0 评论 -
如何测试你的平台是大端字节序还是小端字节序
以前就知道大端模式和小段模式,其实就是题目中说的,大端字节序和小端字节序。其实很简单:小端字节序就是低地址存储数的低位字节。大端字节序正好相反。举个例子。加入有 int a = 0x01000002;假设变量a在内存的地址为:0x00000001;//这只是为了理解,真实的程序中,是不会存储到这的。a占4个字节。它是int类型。也就是0x00000001 0x00000002 0x00000003 0x00000004这4个内存地址。小端字节序会这样存储。0x00000001 0x00000002 0x00转载 2010-08-06 14:39:00 · 1484 阅读 · 0 评论 -
如何让一段程序在main函数之前执行
方法之一:声明一个全局变量,或者全局对象,这个全局对象在man函数之前被执行#include class app{public: //构造函数 app() { cout }};//在全局域声明对象app a;int main(){ cout return 0;}�转载 2010-08-18 17:09:00 · 1207 阅读 · 0 评论 -
Linux多线程实例,在编译中要加 -lpthread参数
问题:undefined reference to 'pthread_create'undefined reference to 'pthread_join'问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。问题解决: 在编译中要加 -lpthread参数 gcc thread.c -o thre转载 2010-08-26 14:29:00 · 4545 阅读 · 1 评论 -
一个守护进程的两种实现
实现守护进程的完整实例(每隔10s在/tmp/dameon.log中写入一句话): ===================================================================== #include #include #include #include #include #include #include #include #define MAXFILE 65535 volatile sig_ato转载 2010-08-30 15:34:00 · 538 阅读 · 0 评论 -
Linux的read/write、fread/fwrite、open/fopen区别
<br />1,fread是带缓冲的,read不带缓冲. <br />2,fopen是标准c里定义的,open是POSIX中定义的. <br />3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别. <br />4,fopen不能指定要创建文件的权限.open可以指定权限. <br />5,fopen返回指针,open返回文件描述符(整数). <br />6,linux/unix中任何设备都是文件,都可以用open,read.<br />如果文件的大小是8k。<br /转载 2010-08-31 10:49:00 · 639 阅读 · 0 评论 -
记录一个普通程序的亮点
下面代码的出彩指出在于他在打开文件失败之后前面申请的内存空间还记得释放掉,这个习惯太好了这里做一下记录,以后提醒自己,不要忘了这些关键的细节.#include #include #include #include #include char* read_from_file (const char* filename, size_t length){char* buffer;int fd;ssize_t bytes_read;/* 分配缓冲区。*/buffer =转载 2010-08-30 13:50:00 · 536 阅读 · 0 评论 -
用blkid库探测文件系统的类型
e2fsprogs的工具包当中携带了一个叫blkid的库,可以用来探测一个文件系统的类型。当我们使用mount device mntpoint时候,mount命令自动识别设备的文件系统类型就是通过这个库来完成的。 blkid库通过扫描指定设备上的文件系统特征值来判断是否属于对应的文件系统。在blkid库的源码文件probe.c当中,我们可见这样的结构值:static struct blkid_magic type_array[] = {/* type kboff sboff len转载 2010-09-01 09:37:00 · 4541 阅读 · 0 评论 -
如何防止自己的子程序成为僵尸进程
这里利用SIGCHLD信号进行父子进程之间的通信,子进程结束之后,如果父进程还没有结束,子进程就向父进程发送一个SIGCHLD的信号这时父进程利用自己的信号处理函数去清理掉子进程形成的僵尸进程.利用响应信号的 机制,父进程不用执行wait函数阻塞在那里等待子进程的结束.还可以处理sigation之后的代码. 这种机制很好,.#include #include #include #include #include #include sig_atomic_t child_exit_sta转载 2010-09-01 13:47:00 · 828 阅读 · 0 评论 -
Linux的段错误是什么以及解决方案
<br />简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.<br /><br />一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相转载 2010-09-01 14:50:00 · 1496 阅读 · 0 评论 -
有关函数指针的问题
<br />下面的三个输出是一样的,即函数名字作为一个地址,作为一个常量来使用<br />所以对这个函数名做&或者*操作是没有意义的. 其值都是一样的.<br /> <br />但是如果要使用一个函数指针的变量,就需要使用* 来调用函数.<br />这个问题解决了我的一个困惑:<br /> <br /> <br />#include <stdio.h>int hello(){ return 0;}int main(){ printf("%p/n",&h原创 2010-09-01 17:11:00 · 437 阅读 · 0 评论 -
桩模块
<br />软件测试技术的一种,主要用在单元测试阶段。由于对已开发的单元模块功能和行为测试会涉及到仿真对象的概念,比如说驱动模块和桩模块。 桩模块:桩模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成的部分。主模块作为驱动模块,与之直接相连的模块用桩模块代替。在集成测试前要为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的接口,接受或传递被测模块的数据,这些专供测试用的“假”模块称为被测模块的桩模块。 如果被测试的单元模块需要调用其他模块中的功能或者函数(metho转载 2010-11-25 23:29:00 · 1101 阅读 · 0 评论 -
ChinaUnix上的C/C++精华文章地址
<br />精华要多读<br />http://www.chinaunix.net/jh/原创 2010-10-10 16:02:00 · 396 阅读 · 0 评论 -
C++和C的一些差别
和C语言相比,C++引入了更多的特性,包括:陈述性声明,类似函数的强制转型,new/delete操作符,布林类型,参考类型,默认参数,函数重载,命名空间,类型(包括所有和类型相关的特性,如继承、成员函数、虚函数、抽象类型和构造函数),操作符重载,模板,::操作符,异常处理和运行时期识别。和普遍认为的相反,C++不是第一个正式引入const关键字的语言。80年代早期,Bjarne Stroustru转载 2013-10-10 16:34:25 · 1057 阅读 · 0 评论