c语言-小白求教C语言头文件和源文件的关系

问题描述

小白求教C语言头文件和源文件的关系

书上说头文件一般只有声明,比如void func(void);
函数的定义则是在源文件中,那也就是说我新建的项目要使用以前项目中写过的一些函数(有相关头文件含有它们的声明),光靠把相关头文件#include进来是没用的喽?

可是为什么像stdio.h这样的可以不用包含它的源文件呢?

解决方案

stdio.h的实现在stdlib里,封装起来了,不能通过文本格式打开,防止被修改!
很多函数只提供给你头文件(相当于接口,只给用户使用),而没有具体实现的源代码
(一是防止修改,二是有些源代码可是公司核心竞争力啊,怎么可能让用户看)
而那些.c和.cpp都会被编译成库(lib,dll等),这些库被放在系统能找到的路径下,楼主只要包含头文件,
具体的实现程序会自己去这些目录下找对应的库

解决方案二:

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:

1.预处理阶段?
2.词法与语法分析阶段?
3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)
4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用......
答案就在这里:C语言中,头文件和源文件的关系

解决方案三:

也可以定义在头文件中

解决方案四:

在我的理解里头文件就是源文件
在编译之前,编译器会把头文件内容展开到源文件里
而声明是告诉编译器,有这个函数/变量,但是不在这里,你去别的地方找。最后在链接的时候会在其他文件找到对应实现,然后把最终地址替换过去
鉴于编译器会把头文件替换到具体文件里,为了方便编译器查找,对于内联函数其实应该直接定义在头文件
然而需要在外部文件定义的内容,则在头文件定义声明,需要使用的时候include,最终由编译器负责找到具体实现链接在一起
头文件应该是可以放置任意C语言代码的,本质上和源文件没多大区别,只不过头文件设计出来的目的是为了方便引用其他文件代码,所以应该只放声明,内联代码,宏定义等内容

最后,对C了解不多,有说错请指出←u←

解决方案五:

向stdio.h这样的库文件之所以不用添加相应的实现文件(即.c文件)到工程中,是因为,你的整个项目在编译的过程中,编译器首先搜索一些固定的位置
(也就是所谓的库文件路径),会根据你所添加的库文件名,将库文件所对应的实现文件编译成的链接库放到工程中,所以库文件是不需要在工程中,
添加相应的实现文件的,但是自己写的.h和.c文件由于编译器的默认搜索路径中没有你以前写的那些文件在,所以会报错,这时候,编译器就会到你项目
的工程目录下搜索,如果有的话,就不会出现问题。。
也就是,项目在编译的时候,编译器首先在Library_path下搜索,然后在工程路径下搜索。。。

解决方案六:

如果你修改编译器的默认搜索路径的话,将自己写好的一些.h和.c所在的路径,加入到搜索路径中的话,你也就只需要在工程代码中包含.h名即可,
就不用将以前写的东西也放到工程项目中了。。。。。。。

时间: 2024-12-29 00:21:51

c语言-小白求教C语言头文件和源文件的关系的相关文章

c语言-c 语言小白求教 请大神指出错误

问题描述 c 语言小白求教 请大神指出错误 #include int main(void) { int a; float years,acounts; years=3.156e7; scanf("%d",&a); acounts=years*a; printf("your age is %f.n",acounts); return 0 } 解决方案 并没有发现什么错误,只是不知道你是什么意思你的years31560000.要这么大有什么用输入一个合理的整数a

C++中头文件和源文件详细介绍

C++中的头文件和源文件详解 一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码. C+ +语言支持"分别编译"(separate compilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要

把一个文件复制一份放到其他地址,比如stm32的一个程序,里面有头文件和源文件

问题描述 把一个文件复制一份放到其他地址,比如stm32的一个程序,里面有头文件和源文件 一分放桌面,复制一个放E盘,当打开桌面上的,修改里面的头文件后,保存,关闭,再打开E盘里面的,里面的头文件也变了,源文件没改变?为什么呢?修改的又不是E盘的?怎 么理解呢? 解决方案 http://www.cnblogs.com/infiniti/archive/2013/03/19/2968689.html

visual studio-为什么重新打开VS之后,之前添加过的头文件和源文件不见了,要重新添加?

问题描述 为什么重新打开VS之后,之前添加过的头文件和源文件不见了,要重新添加? 如题,每次在VS里添加了现有项之后,也保存了,然后再次打开就都不见了,每次都要重新添加,这是为什么? 解决方案 主要是你的工程文件有没有保存,这些包含文件信息都保存在vcprij文件中 解决方案二: 正确保存了么?你打开的是vcxproj还是cpp 解决方案三: 编程是一种美德,是促使一个人不断向上发展的一种原动力.

c语言-小白求教接口使用(asp.net)

问题描述 小白求教接口使用(asp.net) 例如我要使用百度接口 http://api.map.baidu.com/location/ip?ak=DA01fc8690585960288eb3820c5f5bf7&ip=118.113.163.95&coor=bd09ll要怎么使用,还是什么 来着, 然后 传回来的是一串json 要怎么接受这个参数,request.from?我完全不懂 ,希望有例子,或者能讲的通俗易懂点 解决方案 http://download.csdn.net/deta

C++中的头文件和源文件

一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码.C+ +语言支持"分别编译"(separate compilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文

在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求.   内容 查找符号 (.pdb) 文件 查找源文件   查找符号 (.pdb) 文件 说明 在之前的 Visual Studio 版本与 2012 中,调试在远程计算机上的管理的代码需要符号文件还查找了远程计算机. 现在,这已经不成问题了. 所有符号文件必须本地计算机或位于 Visual Studio 选项 对话框的 调试 / 符号 页上指定的位置. 如果调试器搜索 .pdb 文件 | 符号文件的原因需要

c语言-C语言怎么建立自己的头文件?小c渣求助!!

问题描述 C语言怎么建立自己的头文件?小c渣求助!! 建立自己的头文件以及怎么调用头文件?在c++编辑器中怎么操作?最好有图解!! 解决方案 项目-添加新项,选择头文件,输入文件名即可. 头文件可以放任何代码,但是为了避免重复包含,最好用条件编译#if ndef ... 包含. 在代码中用include包含头文件. 解决方案二: 楼上正解,楼主好好学习,多多看书 解决方案三: #ifndef _HELLOW_H #def _HELLOW_H . . . . . #endif

c语言-C语言结构体数组在头文件里赋值的问题

问题描述 C语言结构体数组在头文件里赋值的问题 上面的赋值是写在一个头文件里的,用VS2008,或者VC++6.0调都会出现上面的错误,VS2013和DEV就不会报错. 完整代码是: //头文件"信息.h" struct students { long code; char *name; float score[3]; float sum; }; void default_initiate(struct students stu[ ]) { stu[0] = { 20140001, &