为什么头文件除了函数名都被注释
① 为什么VC的头文件里面的函数只有声明却没有定义
定义是有的,有一些定义被编译成了二进制码了,在头文件中应该可以看到预处理把这些文件包含进去了,就像你要静态调用dll文件就要用预处理把lib文件包含进去一样,至于各个函数的功能,如果是纯运算的那就是编译器的制作者写的,如果是对文件读写,创建窗口,这些就是调用了API函数
② keil自带头文件中为什么只有库函数的声明,它们的具体定义呢
那些库函数并没有给出C语言的源程序,都编译成了库文件XX.LIB。用户是看不到的,可能是为了保密吧。
③ 为什么Win-Tc里面的头文件只有函数的定义却没有函数的实现
函数的实现已经被编译成dll文件和lib,提供用户调用!在头文件中只给出函数的声明,目的是为了系统对函数的参数类型进行行检查!
④ 为什么头文件里已经包含了函数的声明,调用还要声明
定义只能有一次,而声明的次数不限。任何标识符在使用前至少要有声明,将声明放在头文件中,就可以在需要使用到标识符时随时把头文件包含进来即可。如果把定义放进头文件中,那每包含一次头文件,标识符就定义了一次,这样在多文件的编译连接时很容易出问题的。 包含其实就相当于把被包含文件的内容加入到其中,和用被包含文件中的内容替换掉对应的包含语句没有区别。使用头文件的好处就是免除了重复劳动的麻烦。 反正最终编译器都是把被包含文件的内容合并到一块才编译的。所以这样,LZ觉得运行时的调用跟调用任何一个函数有区别吗。
⑤ C语言函数在头文件里被声明是什么含义
一次问题这么多啊,只是声明函数原型嘛,没有什么特别的意思
编译器将会对所有已申明原型的函数,在实际调用的处做严格的参数类型+返回类型的合法性检查,形参与实参类型、返回值类型与接收返回值的变量类型完全合法时没有警告,否则 不合法的报错,有损失数据的隐式的强制转换则会有警告
如果没有函数的原型申请,则实际调用函数时,编译器不检查调用格式是否合法的
除了通知编译器做严格的合法性检查之外,原型申明并不会把未引用的函数链接进最终程序中。
你所担心的问题是不存在的,放心吧,编译器没那么傻,编译器有优化能力
⑥ C语言里有时候头文件光是声明了函数却没有定义函数,为啥就能用那
头文件的函数的实现文件都在其他文件中,比如VC++就是在那些.LIB和.DLL文件中。这样可以把实现文件转化为LIB和DLL,就可以保护你的源代码。而只留出来头文件,给别人看,别人用头文件作为接口,调用LIB或者DLL中的函数。
⑦ C语言如何实现头文件不定义函数名,然后c文件里就不编译该函数,或者其他能实现这样效果的办法
采用条件编译即可。
在.h头文件中加上
#if1
#defineFUNC_ENABLE
voidfun();
#endif
在.c中加上
#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif
当我们不想编译该函数时,加#if 1改为#if 0即可。
例子:
#include<stdio.h>
#if1
#defineFUNC_ENABLE
voidfun();
#endif
#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif
intmain(void){
fun();
return0;
}
⑧ matlab里面有些库函数全是注释,比如sum,但也能运行,那么sum封装到哪里了
应该说,楼上的回答比较接近正确答案,但并非正确答案。
MATLAB 最底层、最核心的代码,例如sum,并非如楼上所说那样,使用mex指令生成mexw32或mexw64文件,而是直接封装在主程序matlab.exe或者位于bin文件夹的某个dll文件中(根据版本不同,封装所在的具体文件也不一样,但可以肯定不是在mex文件中)。这类函数称为内建函数(built-in function)。
你可以使用下面的命令:
which sum -all
看到sum函数的所在位置,很明显,这是一个内建函数。至于sum.m文件,可以看到,处于被遮蔽(Shadowed)的状态,调用的时候不会调用它,其存在的作用在于,用户使用help sum命令的时候,可以为用户提供一个简短的帮助。内建函数的代码以二进制形式存在,你不可能看到它是怎样实现的。
有些函数是楼上所说的mex文件,比如gamma函数。使用mex的目的以及执行过程也基本如楼上所说,但有一点要纠正:mex文件并非“类似”dll文件,而就是一种特殊的dll文件。
至于toolbox,你的理解当然是不对的。matlab目录下对应的是matlab基本模块。因为matlab价钱很贵,正版一般只购买部分模块,最少的情况下,可以只购买一个基本模块。其他目录都是各工具箱,有些最初是由外面的牛人开发,后来被MathWorks公司收购了,有些则从开始就是MathWorks公司自己编写的。新版经常会增加一些新产品,但也有的产品因为和原开发者产生纠纷而不再包含在新版中(不计产品更名、合并这一类的调整)。
⑨ 为什么不包含头文件却可以调用函数,谁来解释
旧的C语言中,函数原型声明不是必需的。
对于没有声明的函数,被认为是返回int类型