结合extern谈谈头文件的作用

摘要: 很多情况下,程序员可能突然产生这样的问题:为什么非得在文件的首位置#include "... .h"? 我include源文件行不行。其实任何后缀的文本文件(忽视编码情况)都可以被#include,但是你去#include 源文件会不会出问题呢?我们看下面测试代码://Single.cpp#ifndef __SINGLE__CPP_#define __SINGLE__CPP_#include <stdio.h>void Fun(){ printf("Fun...\n");}#endif/*__SINGLE__CPP_*///main.cpp# 阅读全文
posted @ 2012-03-15 16:45 菜丝inside 阅读(6799) 评论(1) 推荐(3)

【转载】互斥量和信号量的区别

摘要: 1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源2. 互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程 阅读全文
posted @ 2012-03-15 11:53 菜丝inside 阅读(249) 评论(0) 推荐(0)

结合回调函数介绍下泛型函数

摘要: 其实泛型说白了,就是模板。泛型只不过是学称。下述代码通过函数指针演示了回调函数。测试代码中根据传入函数名作为实参,实现不同的函数调用。#ifndef _POINT__H_ #define _POINT__H_ typedef int (*Calc)(int,int); int Sub(int a,int b); int Minus(int a,int b); void MyPointFun(Calc fun,int a,int b); #endif/*_POINT__H_*/ View Code //PointTest.cpp #include "PointTest.h". 阅读全文
posted @ 2012-03-15 11:51 菜丝inside 阅读(378) 评论(0) 推荐(0)

【转载】GNU:gcc和g++区别

摘要: gcc和g++都是GNU(组织)的一个编译器。 误区一: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不会定义__ 阅读全文
posted @ 2012-03-15 11:51 菜丝inside 阅读(315) 评论(0) 推荐(0)

通过类String看拷贝构造函数,赋值函数的作用和区别

摘要: View Code /*如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式生成自动缺省函数.如果类中含有指针变量,这个缺省函数会带来错误.以类String的两个对象a,b为例,a.m_str内容是"hello",b.m_str的内容为"world".将a赋给b,缺省赋值函数的位拷贝意味着b.m_str=a.m_str,这样会发生如下3个错误:1. b.m_str的原有内存没有释放,造成内存泄露;2. b.m_str和a.m_str指向同一块内存,a或b的任一方变动均会影响到另一方;3. 两个对象被析构时,会造成m_str被析构两次*//*拷 阅读全文
posted @ 2012-03-15 11:38 菜丝inside 阅读(988) 评论(0) 推荐(0)