c++ 中可以使用 namespace 来避免同名引发的错误,而c语言的大型项目中要做到这一点,就有点难度了,通常会使用static来修饰函数。
static 修饰函数声明时,表示该函数只用于本文件的调用范围。效果见下面的小例子:
情况1:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
a.h :
#ifndef A_H_
#define A_H_
#include<stdlib.h>
#include<stdio.h>
static void func_print( int a );
#endif
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
b.c:
#include<stdlib.h>
#include<stdio.h>
void func_print(int a )
{
printf("2222 a = %d ", a);
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
a.c :
#include"a.h"
void func_print(int a )
{
printf("1111 a = %d ", a);
}
void main(void)
{
int a = 10;
func_print(a);
}
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
输出结果为: 1111 a = 10
情况2:
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
a.h :
#ifndef A_H_
#define A_H_
#include<stdlib.h>
#include<stdio.h>
static void func_print( int a )
{
printf("1111 a = %d ", a);
}
#endif
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
b.c:
#include<stdlib.h>
#include<stdio.h>
void func_print(int a )
{
printf("2222 a = %d ", a);
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
a.c :
#include<stdlib.h>
#include<stdio.h>
extern void func_print(int a);
void main(void)
{
int a = 10;
func_print(a);
}
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
输出结果为: 2222 a = 10
本人在解码库中会遇到各种同名的函数,弄个长长的名字来避免链接错误感觉忒别扭。使用static 是个不错的方法~