关于c语言头文件编译和运行的问题

图1是c语言写的main函数程序包含了自己的头文件hello.h图2是另外编写的.c的文件包含一个变量和一个函数图3是头文件的内容声明了一个函数我想了很久的问题就是:1.... 图1 是c语言写的main函数程序 包含了 自己的头文件 hello.h
图2 是另外编写的.c的文件 包含一个变量和一个函数
图3 是头文件的内容 声明了一个函数

我想了很久的问题就是 : 1.程序从主函数开始运行 执行f() 函数 ,这个函数在头文件里已经被声明
并不是很难理解 但是 主函数并没有定义a变量 程序在执行的时候为什么就能把 tops.c 定义的变量进行
使用 而且 我在主函数的文件里 并没有包含类似 #include "tops.c" 这样的头文件 它运行的时候怎么好
像把 tops.c 里的代码全部个复制到了 main()所在的.c的文件里 在网上查找了资料 都说的太模糊了
求详细的解答~~~谢谢
展开
 我来答
tattackor
2015-10-29 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:798万
展开全部

1、只要在程序开头加入#include<头文件名>,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。
2、编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。

孤0鸿
2014-12-02 · TA获得超过186个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:51.6万
展开全部
个人感觉这个应该和编译环境有关系,虽然你没有写相应的代码,其实你在hello.h头文件里已经把tops.c这个文件包括进去了,不然的话,你是在里边声明不了f())函数的,有的编译环境这样写应该是会报错的,而你这个不报错,说明是包含了进去,既然包含了,当然也就f()函数和变量都能用.纯属个人观点,,
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-12-02
展开全部
静态变量跟全局变量都存放在静态存储区,在程序编译的时候就进行初始化,所以f()可以直接调用a。
主函数的文件里 并没有包含类似 #include "tops.c",但是包含了#include "hello.h",这样就包含了void f()的声明,可以直接调用f()函数。
tops.c里的f()函数并没有staic限制,所以可以在hello.h中对它进行声明。这样别的.c文件要调用tops.c里的函数,只需要包含它的声明文件hello.h就可以了。

tops.c最好是跟hello.h名字统一下,比如把hello.h改为tops.h这样就更容易理解了。
更多追问追答
追问

你的回答很满意 , 但是还有一点就是  在主函数 加了一句printf()语句  输出a的值  为什么编译报错 显示undeclared ‘a’  未申明  你前面回答  a为全局变量那应该在主函数可以使用的啊?   难道是之前在tops.c文件里定义的a变量只能tops.c文件所在的函数里进行使用  a的作用域只是在 tops.c的文件里吗?

追答
需要声明,没有声明是不能用的,如果要在主函数里用别的文件的全局变量,则需要加上:
extern int a;
这样才能用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式