将头文件和实现放在同一个文件中。普通函数与静态函数是有区别的。
静态函数:
//static.h
#ifndef CRND_INCLUDE_CRND_H
#define CRND_INCLUDE_CRND_Hstatic int porecss(int value);
#endif#ifndef CRND__CRND
static int porecss(int value)
{
return value++;
}
#endif//test.cpp
#include "static.h"
int fun(int value)
{
int temp = porecss(value);
return temp;
}//test2.cpp
#include "static.h"
int fun2(int value)
{
int temp = porecss(value);
return temp;
}
那么此时编译成功:
查看定义可知:static的函数-静态函数 :和修饰全局变量类似特性,只能在本文件中被访问;有的编码规范要求只本文件使用的函数用static修饰。那么此时在编译阶段,会将静态函数存放在.cpp中。
若为非静态函数。在需要用宏控制实现。保证函数定义在整个目标文件中只有一份。如下:
//static.h
#ifndef CRND_INCLUDE_CRND_H
#define CRND_INCLUDE_CRND_Hint porecss(int value);
#endif#ifndef CRND__CRND
int porecss(int value)
{
return value++;
}
#endif//test.cpp
#include "static.h"
#define CRND__CRND
int fun(int value)
{
int temp = porecss(value);
return temp;
}//test2.cpp
#include "static.h"
int fun2(int value)
{
int temp = porecss(value);
return temp;
}
测试结果:
若不用宏控制,则会发生重复定义。