c语言头文件和源文件不在同一个目录
http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html
从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文件中包含了多个源文件中的定义或声明,则应该按源文件分组布局头文件中的代码,并且通过注释注明每组所在的源文件。当一个工程的文件较多时应该将源文件与头文件分开目录存放,一般头文件存放在include或inc目录下,而源文件存放在source或src目录下,根据经验,一个工程的文件数超过30个时应该将源文件与头文件分开存放,当文件较少时直接放到同一目录即可。
其实,C++标准中也没有确定这两种方式搜索文件filepath的顺序,而是由编译器的实现确定,其区别就是如果编译器按照第二种形式定义的顺序搜索文件filepath失败或者不支持这种方式时,将其替换为第一种顺序再进行搜索。
而实际上,一般来讲第一种方式都是先搜索编译器的系统目录,而第二种方式则是以被编译的头文件所在目录为当前目录进行搜索,如果搜索失败再在系统头文件里搜索。这两种方式从本质上讲没有什么区别,但当我们自己的程序文件与系统头文件重名时,用后者就会先搜到我们的头文件而不是系统的。但无论如何,与系统头文件重名都不是一个好习惯,一不小心就可能带来不必要的麻烦,当我们自己编写程序库时,最好把它放入一个目录里,不把这个目录直接添加到编译器的头文件搜索路径中(如gcc的-I, visual c++的/I选项等,其实在UNIX/Linux平台的编译器一般都是-I选项),而是添加到上一级目录,而在我们的源文件中引用该头文件时就包含该目录名,这样不容易造成冲突。
例如,我们创建了一个程序库叫mylib,其中一个头文件是strutil.hpp,我们可以创建一个/home/user/project/src/mylib目录,然后把strutil.hpp放进去,然后把 /home/user/project/src添加到编译选项里:
gcc -I/home/user/project/src
这样,在我们的源程序中可以这样引用strutil.hpp文件:
#include “mylib/strutil.hpp”
通过显示的目录名引用头文件就不容易产生冲突,不容易使我们自己的头文件与系统头文件产生混淆。
当然,从代码逻辑上我们还有另外一种解决冲突的方案,那就是命名空间,详见第[?]节。
、
http://blog.sina.com.cn/s/blog_6e0693f70100so42.html
VS做的很智能,一个F7就完成了预处理、编译、链接的所有工作。但是当工程比较大,使用的文件模块比较多, 一旦出现编译错误定位问题时就比较困难。因此,有时候需要对每个模块单独编译,就像Linux下编写的 makefile文件一下,分别编译每一个.o目标文件然后再链接成为一个.exe可执行程序。总结下在VS下使用命令行分别编译程序的方法。
在dos下编译的前提环境配置要求:
1.找到vs的cl.exe所在目录,在vs2010为F:\visual 2010\VC\bin,可参考。
2.点击“我的电脑”进行环境变量的配置,找到"path"变量加分号后加入刚才的路径。
3.重新运行cmd开启新的命令窗口,输入cl检查path设置是否生效。(只需配置一次即可,以后再次运行的时候不用再运行此命令)。
4.输入vcvars32,这条命令是运行同路径下的vcvars32.bat设置它的环境变量。
5.输入cl hello.cpp即可正常编译。
下面总结一些常用的命令:
通过快捷方式Visual Studio Command Prompt (2010)可以打开VS的命令行界面。
(1) 在命令行提示符窗口中输入:cl /? 或者 cl -help 可以查看cl所有的命令选项。
(2) 在默认情况下cl编译完后会自动调用link进行链接,可以使用/c选项阻止链接。
(3) 编译一个文件命令:cl /FeMyapp 1.cpp,然后输入程序名Myapp执行程序。(注意1.h在本地,可以通过/I选 项指定头文件路径)
(4) 编译多个文件命令:cl /FeMyapp 1.cpp 2.cpp 3.cpp,然后输入程序名Myapp执行程序。
(5) 只输出 .i 预编译文件命令:cl /FiA /P A.cpp,然后会生成 A.i 预编译文件。这个方法类似Linux下的 gcc -E A.cpp -o A.i 命令。此命令的主要作用是用于检查未定义情况的错误。
(6) 只输出 .o 目标文件命令:cl /FoA /c A.cpp,然后会生成 A.obj 目标文件,类似Linux下的 .o 文件。注 意这里应该带上 /c 选项,原因见(2),即默认情况下,cl会自动对编译好的目标文件进行链接,如果此时,所 编译的目标文件引用了其他目标文件中的符号的话,就会出现链接错误。
参考网址 :http://zhidao.baidu.com/question/184905864
c语言头文件和源文件不在同一个目录的更多相关文章
- 理解C++中的头文件和源文件的作用【转】
一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...
- C++基础之头文件和源文件的关系
今天找了个解析xml的开源C++项目tinyxml,按照网上的说法去编译,但是一直编译不通过,"无法打开头文件tinyxml.h",但是明明我在工程底下有了这个文件,对于我这种初学 ...
- idea 开发javaee 时,出现访问的文件和源文件不一样,没有正常更新的解决方案
这是因为我配置的idea debug 运行模式 输出的文件在 out 和 target 目录下,因为idea本身的原因,导致这两个目录没有及时更新, 导致前端在访问时的页面源码和ide中的一直不一样, ...
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- C头文件和源文件的连
(http://blog.163.com/yui_program/blog/static/18415541520115177852896/) 一.源文件如何根据#include来关联头文件 1,系统自 ...
- C++学习笔记(一):头文件和源文件
说明: 当一个源文件(a.cpp)要调用另一个源文件(b.cpp)定义的方法时,需要在a.cpp中写上这个方法的声明(只需要该方法的名称.返回值和参数,类似Java的接口): 如果每次调用其他文件的方 ...
- C++中的头文件和源文件
一.C++编译模式 通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C ...
- 学习:C++中的头文件和源文件详解
一.C++编译模式: 通常,在一个C++程序中,只包含两类文件――.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是 ...
- C++中头文件(.h)和源文件(.cpp)都应该写些什么
头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下): ...
随机推荐
- [ERROR] Failed to open log
版本:5.5.14 性能测试部-测试环境数据库 1.在性能测试过程中大量的日志,测试人员直接使用 rm -rf 删除所有 2.重启数据库时,出现报错,导致数据库无法启动,查看报错日志,报错信息如下: ...
- 怎样在cmd(命令提示符)下进行复制粘贴操作
如右图,右键命令提示符窗口的标题栏,选择属性. 选择“编辑选项”里的“快速编辑模式”,并确定之: 在弹出的应用选择提示框上选择“保存属性,供以后具有相同标题的窗口使用”: 如此你就可以 ...
- C# 数组CopyTo
private void button1_Click(object sender, RoutedEventArgs e) { int[] copy1 = { 1, 2, 3, 4 }; int[] c ...
- ruby 格式化当前日期时间
ruby 格式化当前日期时间 ruby 用Time类获取当前时间. t = Time.new puts t 可以看到输出的是(我现在运行的时间): Sat Jan 29 10:45:22 +0800 ...
- C#的配置文件App.config使用总结 - 转
http://blog.csdn.net/celte/article/details/9749389 首先,先说明,我使用的app.config 配置文件的格式如下: <?xml version ...
- python 函数默认值的小坑啊
import datetime import time def test(day=datetime.datetime.now()): print day while True: test() time ...
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
// test13.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- Flex 教程(1)-------------控件拖动
今天和大家分享下关于在Flex中 针对控件的拖动开发. 1.需要在 .mxml文件中编写一个Button按钮 如下代码: <s:Button id="button1" lab ...
- 【BZOJ】【2820】YY的GCD
莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...
- Kafka的消息格式
Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...