C语言,头文件不包含也能编译通过

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,头文件不包含也能编译通过相关的知识,希望对你有一定的参考价值。

我想连接include的问题,写了两个文件,创建个VC6工程
main.c
#include <stdio.h>
#include <stdlib.h>
int main(void)

funca();
return 0;

a.c
#include<stdio.h>
void funca()

funca();

我想知道这为什么能编译过,能连接上,还能运行成功呢,main.c里面应该看不到funa才对啊?用VC6跟devc++编译器都这样,高手救命啊!!!

MS VC++ 6.0 (甚至5.0) 允许你不包含 头文件 stdio.h,stdlib.h,编译器自己会加进去。
但 需要 math.h 时,必须自己加进去,不加,编译能通过,但数学函数计算结果得数可能错。

funca() 问题,main.c 把它看成外部函数,链接时才需要寻找 funca() 的入口。

CL main.c a.c 编译能通过,链接也能通过。
-------
CL main.c -c
CL a.c -c
CL main.obj a.obj
编译能通过,链接也能通过.
参考技术A 两个文件时单独编译的,生成两个 .obj 文件,译过程找语法错误不会报错;然后是连接过程,两个.obj 文件连接在一起后,生成了一个 .exe 文件,main 函数就看见funa函数了,所以连接成功追问

那这么说任何时候都没必要加头文件了,头文件意义在哪呢?

追答

头文件的纳入是在编译的时候,编译的时候发现没有头文件会报错

参考技术B turbo
c
2.0编译系统中如果用到输入输出函数是可以不写,用到其他函数就要写对应得头文件,但是turbo
c
3.0中都要写。
你最好是写起嘛,这是一种规范,反正又不累!
参考技术C 当没有声明函数时,第一次调用会被默认为声明,其返回值类型会被默认为int 参考技术D 当没有声明函数时,第一次调用会被默认为声明,其返回值类型会被默认为int

C语言含有包含自定义头文件的程序怎么编译?

我用的是TC2。0,能说下具体怎么做吗?在主函数中加一个包含文件#include<>总是提示找不到文件

1、只要在程序开头加入#include “自定义头文件名”,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。

2、编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。

参考技术A 不同的编译环境方法不尽相同,但基本上都是大同小异。
以VC++7.0为例,首先要确保你的自定义的头文件被包含在项目(或工程)里,如果没有,就在源文件视图中右击“头文件”,单击添加,把自定义的头文件添加进去。随后,在源文件中加入如下的一行代码:
#include"自定义头文件名"即可。
不要#include<>,那个<>是用来包含标准的头文件的,对于用<>包含的头文件,系统会在系统路径中查找头文件,自定义的头文件应该用""来括起来,这样编译器就会在用户目录中搜索这个头文件,即要用#include"",而非#include<>本回答被提问者采纳

以上是关于C语言,头文件不包含也能编译通过的主要内容,如果未能解决你的问题,请参考以下文章

编写C程序时有时候不加头文件也能运行,这是为啥?是否有些头文件必须得加,而有些不用呢?

为啥C程序多文件编译,没有导入自己的头文件也能正常编译通过?

如何解决gcc编译c程序找不到头文件的问题

C语言含有包含自定义头文件的程序怎么编译?

C语言 define 防止头文件重复包含

C语言包含头文件是啥?