c语言程序缺少头文件为啥还可以运行,并得到正确结果?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言程序缺少头文件为啥还可以运行,并得到正确结果?相关的知识,希望对你有一定的参考价值。

int main()

int n;
int i;
int A[100];
int B[100];
int C[2];
printf("输入一个整数n且n<100:");
scanf("%d",&n);
for ( i = 0 ;i < n ;i ++)
A[i]=rand()%2;
for (i = 0 ;i < n ;i ++)
printf("%3d",A[i]);
printf("\n");

memset(C,0,sizeof(C));
for(i=0;i<n;i++)

C[A[i]]++;


for(i=1;i<=1;i++)

C[i]=C[i]+C[i-1];


for(i=n-1;i>=0;i--)

B[C[A[i]]-1]=A[i];
C[A[i]]--;

for(i=0;i<n;i++)

printf("%3d",B[i]);


printf("\n");
return 0;


以上程序对一个数组进行计数排序,数组中的元素为0或者1.该程序在VC下运行结果正确。为什么?输出不是需要#include<stdio.h>,调用memset函数不是需要#include<string.h>,调用rand()函数不是需要#include<stdlib.h>吗?该程序没有任何头文件为什么能运行?

你用的应该是C++的编译器,C++对函数申明不做强制要求,如果函数没有申明,直接使用的话,会给你一个默认申明。
编译过了之后,连接器是根据函数名称进行连接,和申明关系不大,所以,连接器也能找到正确的函数进行连接。

但你这个程序,应该会生成一些warning,提示部分函数没有申明。追问

会给出什么样的默认声明呢?

追答

一般是int fun(),函数调用不检查参数个数,所以,编译是没问题的。

不过,这种用法不建议,因为这种方式,如果函数入参填错了,系统是不会报错的。

参考技术A

很明显不可以运行,这就是证据

参考技术B 这些头文件,在VC软件中,是默认包含的吧,就是头文件,可以在函数中包含,也可以在软件中把一个文件夹下的所有头文件都包含进来... 参考技术C VC并不是标准C,他编译的时候可能默认包括以上头文件。

java中 调用native方法,生成头文件时,为啥不正确?

其中bin文件夹是生成的class文件夹,还有一个src是源文件夹
myeclipse生成的异常是第三个图。

displayHellowWorld应该是一个抽象方法,因为你没有方法体,并且你没有把它声明是抽象方法,此为错误一。。
类是一个非抽象类,但是你里面却有一个抽象方法,此为错误二,所以编译不通过。。追问

这是native方法,你看见displayHellowWorld有native修饰了吗,利用这个方法可以从java程序中跑到C程序中执行。具体你可以百度一下。。。还是很感谢你的回答。。。

追答

- - 还真的没用过native,因为我都是用java开发网站的而已

参考技术A 亲爱的小同志 你写的类名是HelloWorld 但是你在调用的时候是 包名.HellowWorld
看出来了吗??HelloWorld 和HellowWorld是不是不一样?多了个小写的 w
以后记得细心哦~~本回答被提问者采纳
参考技术B 那你类文件nativefangfa.HelloWorld拷贝到当前目录下没追问

手贱了。。。命令行中少写个w。。

以上是关于c语言程序缺少头文件为啥还可以运行,并得到正确结果?的主要内容,如果未能解决你的问题,请参考以下文章

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

新手请教:我自创建了c语言头文件,可是为啥运行时自己的头文件不能包含进去。请高手为我解答。谢了!

C++调用bat后,为啥运行完不出结果

没有头文件,为啥下面的程序能运行

最近在自学C语言,用的VS2019,为啥照抄结果还报错?请指教。。。。

为啥不包含头文件却可以调用函数,谁来解释