一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
关于变量的声明和定义
一个函数一般由两部分组成:声明部分和执行语句
声明部分:作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行声明
在声明部分出现的变量有两种情况 ※:
- 一种是需要建立存储空间的(如 "int a;"): 称为定义性声明(defining declaration),或简称定义(defining)
- 另一种是不需要建立存储空间的(如"extern a;"): 引用性声明(referencing declaration)
把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。
内部函数和外部函数
内部函数
如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型前加static
static 类型名 函数名(形参表);
static int fun(int a, int b); // fun是一个内部函数,不能被其他文件调用
内部函数又称静态函数,因为它是用static声明的。使用内部函数,可以使函数的作用域只局限于所在文件。
外部函数
如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用
// 如函数说不可以为
extern int fun (int a, int b); // 函数fun可以为其他文件调用
如果在定义函数时省略extern,则默认为外部函数。
在需要调用此函数的其他文件中,需要对此函数作声明。在对此函数作声明时,加上关键字extern,表示该函数“是在其他文件中定义的外部函数”
示例:
#include <stdio.h>
int main() {
// 11. 有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去. ----- 用外部函数实现
// This is a C program 删掉空格
// 分别定义3个函数来输入字符串 删除字符 输出字符串并分别放在3个文件中
extern void enter_string(char str[]);// 对函数的声明
extern void delete_string(char str[], char ch); // 对函数的声明
extern void print_string(char str[]); // 对函数的声明
// 以上3行声明了本函数中将要调用的已在其他文件中定义的3个函数
char c, str[80];
enter_string(str); // 调用在其他文件中定义的 enter_string 函数
scanf("%c", &c); // 输入要求删除的字符
delete_string(str, c);
print_string(str);
return 0;
}
file1.c
#include <stdio.h>
// 定义外部函数 enter_string
void enter_string(char str[80]) {
gets(str); // 向字符数组输入字符串
}
file2.c
#include <stdio.h>
// 定义外部函数 delete_string
void delete_string(char str[], char ch) {
int i, j;
for (i = j = 0; str[i] != '\0'; i++) {
if (str[i] != ch) {
str[j++] = str[i];
}
}
str[j] = '\0';
}
file3.c
```c
#include <stdio.h>
// 定义外部函数 print_string
void print_string(char str[]) {
printf("%s\n", str);
}
- 为什么要用函数
- 怎样定义函数
- 调用函数
- 对被调用函数的声明和函数原型
- 函数的嵌套调用
- 函数的递归调用
- 数组作为函数参数
- 局部变量和全局变量
- 变量的存储方式和生存期
- 关于变量的声明和定义
- 内部函数和外部函数