内部函数(用static关键字说明)是作用域只限于说明它的源文件的函数。作用域指的是函数或变量的可见性。如果一个函数或变量在说明它的源文件以外也是可见的,那么就称它具有全局或外部作用域;如果一个函数或变量只在说明它的源文件中是可见的,那么就称它具有局部或内部作用域。
内部函数只能在说明它的源文件中使用。如果你知道或希望一个函数不会在说明它的源文件以外被使用,你就应该将它说明为内部函数,这是一种好的编程习惯,因为这样可以避免与其它源文件中可能出现的同名函数发生冲突。请看下例:
#include <stdio.h>
int open_customer_table(void); /*global function, callable from any module */
static int open_customer_indexes(void); /*local function, used only in this module */
int open_customer_table(void)
{
int ret_code;
/* open the customer table */
......
if (ret_code == OK)
{
ret_code = opcn_customer_indexes();
}
return ret_code;
}
static int open_customer_indexes(void)
{
int ret_code;
/* open the index files used for this table */
......
return ret_code;
}
在上例中,函数open_customer_table()是一个外部函数,它可以被任何模块调用,而函数open_customer_indexes()是一个内部函数,它永远不会被其它模块调用。之所以这样说明这两个函数,是因为函数open_customer_indexes()只需被函数open_customer_table()调用,即只需在上例所示的源文件中使用。