C语言——函数定义时前加 static 作用

发布时间 2023-06-15 15:11:57作者: 森是林上木

参考:c中函数前面加static的意义 -123我爱编程-ChinaUnix博客

static void qoi_write_32(unsigned char *bytes, int *p, unsigned int v) {
	bytes[(*p)++] = (0xff000000 & v) >> 24;
	bytes[(*p)++] = (0x00ff0000 & v) >> 16;
	bytes[(*p)++] = (0x0000ff00 & v) >> 8;
	bytes[(*p)++] = (0x000000ff & v);
}

static unsigned int qoi_read_32(const unsigned char *bytes, int *p) {
	unsigned int a = bytes[(*p)++];
	unsigned int b = bytes[(*p)++];
	unsigned int c = bytes[(*p)++];
	unsigned int d = bytes[(*p)++];
	return a << 24 | b << 16 | c << 8 | d;
}

  函数中加“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

  根本原因是C语言中同一个工程中不能有同名函数

 

定义静态函数的好处

<1> 其他文件中可以定义相同名字的函数,不会发生冲突

<2> 静态函数不能被其他文件所用。

 

关于内联函数

内联函数是在函数的前面加“inline”意思是这个函数要插到程序中,让编译器不用函数名跳转的方式来实现(原因是这样跳来跳去比较花费时间)而是直接插在运行的地方变成二进制文件,将来运行到这个地方直接运行类似于宏代替,不好的地方就是这种函数一般用得比较频繁,所以可能很多地方都要占用空间,而不是跳过去执行只需要一个地方有这段代码就行,所以书面的说我们是“空间”替换了“时间”

关于内联函数必须加static的问题

内联函数一般都写成static inline原因是内联函数一般写在.h文件中,这个文件的原则其实是不写函数而只写函数名,现在写了函数了很多.c文件可能都会包含这个.h文件如果不写static,编译的时候就会在linking过程中编译不过,其实意思就是同一个工程中不能有相同的文件名