- 浏览: 983732 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
今天找了个解析xml的开源C++
项目tinyxml,按照网上的说法去编译,但是一直编译不通过,“无法打开头文件tinyxml.h”,但是明明我在工程底下有了这个文件,对于我这种初学C++
的人来说我并不知道头文件和源文件到底什么关系(不像java的类文件),不过最终还是解决了这个问题。
一、源文件如何根据#include来关联头文件
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。
#include
2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。
#include “"xxx.h”(我一直以为””和<>没什么区别,但是tinyxml.h是非系统下的都文件,所以要用””)
二、头文件如何来关联源文件
这个问题实际上是说,已知头文件“a.h”声明了一系列函数,“b.cpp”中实现了这些函数,那么如果我想在“c.cpp”中使用“a.h”中声明的
这些在“b.cpp”中实现的函数,通常都是在“c.cpp”中使用#include “a.h”,那么c.cpp是怎样找到b.cpp中的实现呢?
其实.cpp和.h文件名称没有任何直接关系,很多编译器都可以接受其他扩展名。比如偶现在看到偶们公司的源代码,.cpp文件由.cc文件替代了。
在Turbo C中,采用命令行方式进行编译,命令行参数为文件的名称,默认的是.cpp和.h,但是也可以自定义为.xxx等等。
谭浩强老师的《C程序设计》一书中提到,编译器预处理时,要对#include命令进行“文件包含处理”:将file2.c的全部内容复制
到#include
“file2.c”处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么----因为#include预处理就是完成了一个“复制
并插入代码”的工作。
编译的时候,并不会去找b.cpp文件中的函数实现,只有在link的时候才进行这个工作。我们在b.cpp或
c.cpp中用#include
“a.h”实际上是引入相关声明,使得编译可以通过,程序并不关心实现是在哪里,是怎么实现的。源文件编译后成生了目标文件(.o或.obj文件),目标
文件中,这些函数和变量就视作一个个符号。在link的时候,需要在makefile里面说明需要连接哪个.o或.obj文件(在这里是b.cpp生成
的.o或.obj文件),此时,连接器会去这个.o或.obj文件中找在b.cpp中实现的函数,再把他们build到makefile中指定的那个可以
执行文件中。
在Unix下,甚至可以不在源文件中包括头文件,只需要在makefile中指名即可(不过这样大大降低了程序可读性,是个不好
的习惯哦^_^)。在VC中,一帮情况下不需要自己写makefile,只需要将需要的文件都包括在project中,VC会自动帮你把makefile
写好。
通常,编译器会在每个.o或.obj文件中都去找一下所需要的符号,而不是只在某个文件中找或者说找到一个就不找了。因此,如果在几个不同文件中实现了同一个函数,或者定义了同一个全局变量,链接的时候就会提示“redefined”。
一、声明与定义的区分:
一个声明就是一个定义,除非 :
声明:引入名称
定义:引入实体
它声明了一个没有详细说明函数体的函数
它包含一个extern定义符且没有初始化函数或函数体
它是一个包含在一个类定义之内的静态类数据成员的声明,它必须在最终程序的某处准确的定义一次
它是一个类名声明,如class test;
它是一个typedef声明。
言外之意:
1。类的声明也就是定义
2。同时赋初值的声明也就是定义,如
3。类非静态数据成员的声明也就是定义???
4。类的所有成员函数的声明也就是定义
一个定义就是一个声明,除非:
1.它定义的是一个静态数据成员
2.它定义了一个非内联成员函数
内部连接和外部连接:
编译时每个文件会被编译成一个含有必要信息的源文件(又叫编译单元),然后编译单元会联结成一个和族文件同名的.o文件,.o文件把不同的编译单元中产生的符号联系起来,构成一个可执行文件。有两种截然不同的链接:内部的和外部的,将这些编译单元联系起来。
内部连接:对这个定义的访问被局限在当前编译单元,其他编译单元无法访问。
外部连接:可被其他单元访问,因此名称在整个执行文件中必须唯一。
类的定义(同时也是声明),enum,struct,都是内部连接,内联函数,静态的非类成员数据也是
typedef声明的类型也是内联结。
非内联成员函数(包括静态成员)有外部连接,非内联函数,非静态自由函数(非类的成员函数)也是外连接。
声明只对当前编译单元有用,他们不会影响到.o文件,
.h文件,由于该文件会被其他.cpp文件包含,但由于声明只是对当前编译单元有效,是不会将符号引入.o文件,所以该文件不能含有任何外部连接的符号(数据成员和函数)的定义。一般情况下也不要包含内连接符号的定义。
综上所诉:
.h文件中能包含:
类成员数据的声明,但不能赋值
类静态数据成员的定义和赋值,但不建议,只是个声明就好。
类的成员函数的声明
非类成员函数的声明
常数的定义:如:const int a=5;
静态函数的定义
类的内联函数的定义
不能包含:
1. 所有非静态变量(不是类的数据成员)的声明
2。 默认命名空间声明不要放在头文件,using namespace std;等应放在.cpp中,在.h文件中使用std::string
发表评论
-
NotePad++ - 安装和配置C/C++开发插件
2011-11-15 23:00 1759NotePad++ - 安装和配置C/C+ ... -
VC中使用ATL编写控件 【转】
2011-10-21 15:23 2107VC中使用ATL编写控件 作者:邵盛松 2010 ... -
在Windows环境下MongoDB搭建和简单操作【转】
2011-10-21 12:37 938一,安装mongoDB 1,解 ... -
Mongodb在Windows下安装及配置【转】
2011-10-21 12:35 5501.下载mongodb的windows版本,有32位和64位版 ... -
一篇介绍VC开发OCX的文章[转]
2011-10-20 17:57 1822转自“http://www.cnblogs.com/genga ... -
使你的ActiveX控件执行时不弹出安全性提示 (转载)
2011-10-20 17:56 1164使你的ActiveX控件执行时不弹出安全性提示 2010-0 ... -
VC++ 的MFC 和ATL 及COM 是什么?
2011-10-20 01:12 988一、什么是MFC 微软基础类(Micro ... -
使用ATL编写一个简单的COM服务器【转】
2011-10-20 01:10 863下载例子代码 本文的对象是COM编程 ... -
使用VC++6.0制作ASP服务器控件简介[转]
2011-10-20 01:10 669用ASP写网页的程序 员,一定对VBSript语句“Set ... -
基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql
2011-09-01 13:49 1513基于CentOS 5.4搭建nginx+php+sp ... -
解决mrtg的Use of uninitialized value in hash element at /usr/bin/indexmaker line 35
2011-09-01 13:41 2303mrtg的安装过程这里就不再阐述,随便搜索一下。使用ind ... -
用MRTG检测Linux网络性能
2011-09-01 10:49 869随着Linux应用的日益广泛,有大量的网络服务器使用Linux ... -
Linux安装配置maven3.0以及搭建nexus私服
2011-08-30 23:45 1625一、软件准备 1、apache-maven-3.0-b ... -
GraphicsMagick介绍及安装
2011-08-30 23:16 1533作者:Cocowool 来源:博客园 发布时 ... -
Makefile
2011-08-30 22:10 868CC = g++ CFLAG = -Wall -g -w ... -
高位字节优先 低位字节优先
2011-08-24 17:30 1161自第一台计算机诞生, ... -
C++方式的文件操作
2011-08-24 16:05 1815本文主要讨论C++标准I/O库,主要内容为控制台输入输出流 ... -
【JAVA实用工具】JNA-通过它调用C++的方法,比JNI方便很多访问网站需要代理,所以把它COPY出来备忘
2011-08-24 00:33 3103How To Get Started Using JN ... -
Jni中C++和Java的参数传递
2011-08-24 00:04 5117如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
aaaaa
2011-08-24 00:04 994如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ...
相关推荐
C++中的头文件和源文件.pdf
C++中的头文件和源文件[参考].pdf
主要介绍了C++中头文件和源文件详细介绍的相关资料,需要的朋友可以参考下
c++ ado sqlser2000 在MFC数据库开发中添加该头文件和源文件,数据库接口已经封装好,而且经过测试
linux下posix标准的正则表达式库,支持regcomp, regexec等,可以放到vs2010或vs2012下进行编译。
该程序提供一种基于C++创建类实现对所输入的成绩进行求取最大成绩值。本例只提供了输入3个成绩求取其中最大成绩,用户可以根据自己需要在main函数中进行扩展。
基于殷人昆的《数据结构》实现,包含头文件和测试代码,原作者吴乃陵@SEU
主要给大家介绍了关于C++中头文件与源文件的作用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
C++ 命名规范,这很值得看的,不要小看编程规范,这是成为C++高手必须看的哦。
此压缩包内是一个C++项目,头文件和源文件齐全,使用格子Boltzmann方法(LBM)模拟了微流动并计算drag。
ini配置文件,该文件采用C++编的,里面有适用说明,包括头文件和源文件。
C++ ,VS2010平台编辑,下载后可以直接使用,包含头文件和源文件
自己从网上找的资源,编译通过 其中有两种方法都实现了base64编解码
二进制数据文件将转换为HEX表示形式,并存储在“ resource.h”和“ resource.cpp”文件中
本文档以简单的”Hello world“程序介绍在linx下使用vi编译C++头文件和源文件。
这是用C++编写的银行储蓄管理系统,是一个文件包,可以直接在VS上直接运行,同时里面包含了各个头文件和源文件
docs(tom):tom提供了加密函数库的pdf说明(想进一步了解功能可以看头文件和源文件中的注释) Rinick's ECC:椭圆曲线非对称加密的一个例子和密钥生成器 几个基本功能封装成了独立的函数,使用变得较为简单
因为opencv官方api中没有提供susan特征检测函数,因此作者本人根据相关原理编写了检测图像头文件和源文件,,详情请参考我的博客以及代码的说明