当前位置: 首页 > news >正文

C函数函数

内部静态函数和外部函数

函数本质上是全局的,因为定义一个函数的目的就是要被另外的函数调用。如果不加
声明的话,一个文件中的函数既可以被本文件中其他函数调用,也可以被其他文件中的函数
调用。
但是,也可以指定某些函数不能被其他文件调用。根据函数能否被其他源文件调用,
将函数区分为内部函数和外部函数。

内部静态函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,
在函数名和函数类型的前面加static,即:
static 类型名 函数名(形参表);
例如static int fun(int a,int b),fun是一个内部函数,只能在本文件中使用,不能被其他文件调用。
内部函数又称静态函数,因为它是用static声明的。使用内部函数,可以使函数的作用
域只局限于所在当前文件中使用。这样,在不同的其他文件中即使有同名的内部函数,也互不干扰,不必担心所用内部函数是否会与其他文件模块中的函数同名。
通常把只能在本文件中使用的函数和外部变量放在文件的开头,前面都冠以static使之局部化,变成内部静态函数外部静态全局变量其他文件不能引用。这就提高了程序的可靠性。
file.c
static int a;
static int b;
static int fun(int a,int b);

外部函数

如果在定义函数时,在函数首部的最左端加关键字extern(可省略),则此函数是外部函数,可供其他文件调用。
在当前本文件中,定义函数时可省略extern,则默认为外部函数。
extern int fun(int a, int b)
在需要调用此函数的其他文件中,需要对此函数作声明(不要忘记,即使在本文件中调
用一个函数,也要用函数原型进行声明)。在对此函数作声明时,要加关键字extern,表示该
函数“是在其他文件中定义的外部函数”。
filel.c(1)
#include <stdio.h> int main() { //以下3行声明了在本函数中调用的已在其他文件中定义的3个函数 extern void enter_string(char str[]); //对其他文件的函数的声明 extern void delete_string(char str[],char ch); //对其他文件的函数的声明 extern void print_string(char str[]); //对其他文件的函数的声明 //定义局部变量 c str char c,str[80]; enter_string(str);//调用其他文件中定义的enter_string函数,并传入参数str delete_string(str,c);//调用其他文件中定义的delete_string函数,并传入参数str c print_string(str);//调用其他文件中定义的print_string函数,并传入参数str return 0; }
file2.e(2)
void enter_string(char str[80]) //定义外部函数enter_string { gets(str); }
file3.e(3)
void delete_string(char str[],char ch) //定义外部函数delete_string { }
file4.c(文件4)
void print_string(char str[]) //定义外部函数print_string { printf(”%s\n”,str); }

第三方库里的外部函数的引用

在当前文件中,我要使用第三方库里的某一个外部函数的引用, 不需要 额外写extern 某一个函数 这么费劲。 只需要 引入#include 头文件即可 因为头文件里包含了 该外部函数的原形函数的引用。
例如: 使用第三方库里sin函数 只需要在当前文件里 #includde <math.h >即可。
http://www.jsqmd.com/news/1191303/

相关文章:

  • 2026年江西吉安地区精油生产厂家怎么选不踩坑 - 热点品牌推荐
  • OpenCV模板匹配技术实战:游戏画面识别与自动化触发
  • 用SciPy做业务假设检验:从p值到决策的完整实践
  • 功率管死区时间测量与优化:从原理到实践完整指南
  • AI图像生成提示词工程:从创意描述到视觉实现的技术解析
  • SystemC:Channel
  • 2026年液压油缸领域专业分析:东莞市米苏米实业有限公司技术实力与产品特性 - 甄选服务推荐
  • MM配置-库存管理和实际库存-“交货完成”标识的业务逻辑与场景解析(SPRO-Set “Delivery Completed“ Indicator)
  • 2026无人机考试备考指南,帮你避开考官不会说的扣分点
  • 豆包AI播客图文自动化:音频转结构化内容的实战工作流
  • IBM Thread and Monitor Dump Analyzer for Java:从线程状态解析到性能瓶颈定位实战
  • 【2027最新】基于SpringBoot+Vue的协同过滤算法黔醉酒业白酒销售系统管理系统源码+MyBatis+MySQL
  • 雅典官方保养价格查询|详细网点地址及服务电话权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • Gemini3:面向硕博科研工作流的垂直大模型重构
  • SAP ABAP 处理HTTP请求响应与异常:从状态码到错误调试
  • 自动化仓储RGV电控故障复盘:8类高频PLC问题排查思路与日常保养规范
  • 生产制造 | ESPRIT一出多编程刀路自适应优化功能介绍
  • 智慧园区数字孪生能解决什么问题?六大应用价值与平台选型解析
  • 桌面Claude:终结终端时代的人机交互范式升级
  • 2026年7月介休破碎机/山西双轴破碎机厂家深度推荐_介休市晟乾机械制造有限公司 - 品牌宣传支持者
  • ERNIE-5.0-preview:语义结构图谱驱动的可追溯大模型
  • 7月更新来了! ChatGPT、Codex、Pro、Plus 背后难题:AI Failure Recovery 将成为 LLM-Native 系统的核心能力(GPT5.6实现)
  • 伯爵售后组专业提供腕表维修与保养服务权威公示(2026年7月最新) - 亨得利钟表维修中心
  • 看似合规实则违规!FB 最隐蔽 5 个封号冷门雷区
  • NanoBanana:面向边缘会议语音的轻量级本地ASR架构拆解
  • 雅可比矩阵:非线性系统线性化的核心工具
  • Hermes Agent语义化监控:从指标采集到业务可观测性升级
  • AI视频修复与特效字幕制作:从4K提升到多语言字幕全流程实践
  • 遗传算法工程化:适应度设计与多样性监控实战指南
  • OMAP-L138外部存储器接口(EMIFA/DDR2)设计:时序、PCB与驱动实战