千家信息网

c语言内外部函数与编译预处理的方法

发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章主要介绍"c语言内外部函数与编译预处理的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"c语言内外部函数与编译预处理的方法"文章能帮助大家解决问题。
千家信息网最后更新 2025年01月28日c语言内外部函数与编译预处理的方法

这篇文章主要介绍"c语言内外部函数与编译预处理的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"c语言内外部函数与编译预处理的方法"文章能帮助大家解决问题。

内部函数与外部函数

C语言程序的基本构成单位是函数,多源程序文件构成的程序中,函数的定义和调用也必须考虑可以调用的程序范围问题。

函数本质是全局的,定义函数的目的就是被其他函数调用。如果不回声明的话,一个源程序文件中定义的函数既可以被本文件中的其它函数被调用,也可以被其它源程序文件中的函数调用。根据函数能否被其他源程序文件调用,可以把函数分为内部函数和外部函数。

1. 内部函数

如果一个函数只能被其所在的源程序文件中其它的函数调用,则称为内部函数。定义内部函数时,在函数头的前面加上static关键字

static 类型标识符 函数名(形式参数列表)

{

}

2. 外部函数

如果在定义函数时,在函数头的前面使用extern关键字进行说明,则函数为外部函数。可以供其他源程序文件中的函数调用,一般形式如下:

extern 类型标识符 函数名(形式参数列表)

{

}

例如:

extern void process(int a, int b)

{

……

}

C语言规定,如果在定义函数时没用使用static或extern关键字说明,则函数默认为外部函数,即相对于使用了extern说明。

在需要调用外部函数的其它源程序文件中,需要对被调用的函数进行使用extern关键字进行原型说明。例如:extern void process(int a,int b);

编译预处理

C语言的编译预处理命令主要包括:宏定义、文件包含和条件编译。预处理命令均以"#"开始,命令的结尾没有分号,每条预处理命令必须占用单独一行。

1.宏定义

(1) 无参宏定义

无参宏定义的一般形式如下:

#define 宏名 字符序列

如果源程序中使用了宏定义,编译预处理过程中,自动把源程序中出现的所有"宏名"替换为"字符序列",这是一个纯文本替换,也称为宏替换。

例如下面定义了3个无参宏名:

#define PI 3.14

#define R 10

#define AREA PI*R*R

(2) 有参宏定义

有参宏定义的一般形式如下:

#define 宏名(参数表) 字符序列

有参宏定义在进行宏替换时,源程序出现宏名的地方都使用字符序列替换,替换时使用宏引用中的实参去替换宏定义中的形参。

例如,如下定义了一个有参的宏名。

#define MUL(a,b) (a)*(b)

源程序中可以使用如下语句使用有参的宏:

int x=3, y=4, z;

z=MUL(x,y);

注意:通常需要在有参宏定义时,字符序列中参数要加上圆括号,以免进行宏替换时出现错误,如z=MUL(x+3,y-1)*10,进行宏替换后的语句为:z=x+3*y-1*10;。

(3) 文件包含

文件包含也是一种编译预处理命令,其作用是把被包含的文件的内容全部引入到使用文件包含命令的源程序文件中。文件包含命令有以下2种形式:

#include <文件名> 或 #include "文件名"

文件包含命令使用尖括号形式时,编译器在系统默认的路径中寻找被包含文件;使用双引用形式时,编译器先在用户程序的当前工作目录中寻找被包含文件,如果找不到文件,再去系统默认的路径中寻找文件。

下面是几个文件包含命令的例子:

#include //包含系统预定义的头文件

#include "user.h" //包含自定义的头文件

#include "func.c" //包含自定义的源程序文件

(4)条件编译

通常情况下,源程序文件中的所有语句行都需要参与编译,并生成到目标文件中。如果源程序需要根据特定的条件决定一部分源代码是否参加编译,则需要使用条件编译预处理命令。

C语言的条件编译预处理指令主要有三种形式。

1、#if指令

一般形式:

#if 表达式

程序段1

#else

程序段2

#endif

2、#ifdef指令

一般形式:

#ifdef 宏名

程序段1

#else

程序段2

#endif

3、#ifndef指令

一般形式:

#ifndef 宏名

程序段1

#else

程序段2

#endif

关于"c语言内外部函数与编译预处理的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

函数 文件 编译 源程序 预处理 形式 程序 命令 宏名 语言 字符 序列 条件 方法 关键 关键字 参数 指令 内外部 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术学习模拟软件 深圳市网络安全协会会员单位 信管家服务器最新消息 填报志愿数据库软件 软件开发算法专利 黑客获取服务器管理员权限 合肥机械软件开发平台 系统数据库实例修改 妨害信息网络安全 软件测试对应软件开发阶段 何为电子商务网络技术 护苗网络安全课家长感想 深圳服务器系统集成服务多少钱 网络安全隐患名称 专业的软件开发看完你就知道了 太原云核网络技术经理 t1系统能否导入数据库 河南网络软件开发计划 浙江hpe塑合型服务器云服务器 文献数据库以文献为检索对象 西安冠盈互联网科技有限公司 天猫无忧购服务器 软件开发类岗位编程题笔试 无线网卡域名服务器设置 广东蓝牙软件开发品牌 太原云核网络技术经理 内蒙古财经大学网络安全中心 世界网络安全大赛中国队 视易通娱服务器型号 订单系统数据库设计
0