关于c语言头文件编译和运行的问题
答案:3 悬赏:50 手机版
解决时间 2021-11-23 16:31
- 提问者网友:黑米和小志
- 2021-11-23 05:13
关于c语言头文件编译和运行的问题
最佳答案
- 五星知识达人网友:底特律间谍
- 2021-11-23 06:28
静态变量跟全局变量都存放在静态存储区,在程序编译的时候就进行初始化,所以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;
这样才能用。追问谢谢~~~~
主函数的文件里 并没有包含类似 #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楼网友:舊物识亽
- 2021-11-23 08:51
1、只要在程序开头加入#include<头文件名>,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。
2、编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。
- 2楼网友:三千妖杀
- 2021-11-23 07:26
个人感觉这个应该和编译环境有关系,虽然你没有写相应的代码,其实你在hello.h头文件里已经把tops.c这个文件包括进去了,不然的话,你是在里边声明不了f())函数的,有的编译环境这样写应该是会报错的,而你这个不报错,说明是包含了进去,既然包含了,当然也就f()函数和变量都能用.纯属个人观点,,
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯