C语言怎样才能在头文件中实现函数定义?

如题所述

C语言在头文件中实现函数定义,可以按如下方法:

    新建一个demo.h(也可以为其它文件名)的头文件,在头文件中添加函数定义,如:extern void demo();

    新建一个c文件,在文件中将demo.h包含进来:#include“demo.h”,在此文件中将函数的主体写上,如下:

    void demo()

    {

        printf("Hello.");

       }

经过上述步骤,即可完成在头文件中实现函数定义。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-10-24
正常的函数是不可以在头文件中定义的,除非你将函数定义成内联函数。
在定义函数的时候,前面加上inline 就可以了。
如:
inline int a()
{

}
但是内联函数是C++里面的,可能C的编译器会不支持。如果你的编译器不支持,你可以使用宏来代替内联函数,宏是可以定义在头文件中的。追问

怎么用宏来定义函数?
内联函数的话,因为里面有循环,所以……

追答

如果宏用的好,可以实现函数的功能,但是宏是单纯的字符替换,用的时候会产生很多麻烦。
有循环也可以使用内联函数的,内联函数实质就是把函数的全部代码写在了调用的地方,省去了函数调用的时间。
在头文件中,如果不使用内联,应该是没有别的方法了。

追问

是不是for在所有循环当中最能兼容inline?
还有,我的KEIL出错……

追答

循环和内联的兼容没有关系的,内联函数只是在编译的时候,使用函数中的代码替换了函数调用,是函数出现一次(就是你的代码中,写了一次内联函数),会耗费一定的内存,并不是调用一次就会耗费内存,在循环中使用的次数对内存没有影,这个跟递归是不一样的。
设计C的人就是把函数的定义设计成写在.c文件里,因为内联比较特殊,才可以在头文件中定义。
只有特别短的函数才适合定义能内联,正常情况是不适用的。

追问

我的KEIL出错!
这样写对吗?
……
inline uchar Binary(char *bin)
{
uint strlong;
strlong=sizeof(*bin)/sizeof(*char);
uint i,r;
bin+=strlong-2; //光-1不行,还得减去空字符
for(i=0;i<=strlong;i++)
{
r=r*2+(*bin=="1");
bin--;
}
}
……

追答

51单片机那块我不是很懂,keil出错我可能是帮不上忙,但是我觉得函数定义就应该在.c文件里,keil出错应该不是把函数定义放在头文件就可以解决的,应该有其他的原因。

本回答被提问者和网友采纳
第2个回答  2012-05-24
头文件和源文件没什么两样,可以直接定义,但是在头文件中使用定义是违背初衷的做法,是应该杜绝的追问

教我咋用宏写代码?

追答

好,你要学习用宏写什么?

追问

写宏函数

追答

简单的一个宏函数,
#define MAX(a,b) ((a) > (b) ? (a):(b))
所有参数最好用()括起来,否则会产生副作用

追问

复杂的
怎样在宏中创建变量?

追答

你不要把宏当作一门语言看待,
在宏创建变量,还有写语句都是使用C语言的规则。
建立一个复杂的宏也是一样的。

第3个回答  2012-05-24
#include <iostream>
using namespace std;
const size=3;
template<class T>
class vector
{
T* v;
public:
vector()
{
v=new T[size];
for(int i=0;i<size;i++)
v[i]=0;
}
vector(T* a)
{
for(int i=0;i<size;i++)
v[i]=a[i];
}
};
int main()
{
int x[3]={1,2,3};
int y[3]={4,5,6};
vector<int>v1;
vector<int>v2;
v1=x;
v2=y;
return 0;
}
相似回答