// 关于变量的声明和定义
一个函数一般由两部分组成:声明部分和执行语句
在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如"int a;"),
另一种是不需要建立存储空间的(如"extern a;").
前者称为定义性声明(defining declaration),或简称定义(definition);
后者称为引用性声明(referencing declaration).
一般为了叙述方便,把建立存储空间的声明称为定义,而把不需要建立存储空间的声明成为声明。
int main()
{
extern A //是声明,不是定义。声明将已定义的外部变量A的作用与扩展至此
...
return 0;
}
int A; //是定义,定义A为整型外部变量
// 内部函数和外部函数
1.内部函数
如果一个函数智能被本文本中其他函数所调用,它称为内部函数。
在定义内部函数时,在函数名和函数类型的前面加static,即
static 类型名 函数名(形参表);
例如,函数的首行:static int fun(int a,int b)
表明fun是一个内部函数,不能被其他文件调用。
内部函数又称 静态函数
2.外部函数
如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。
如函数首部可以为
extern int fun(int a,int b)
这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略 extern,则默认为外部函数。
有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。
- // file1.cpp
- //
- #include "stdafx.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- 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_s("%c",&c); 输入要求删去的字符
- //scanf把最后一次的回车当成了输入符
- c = getchar();
- //getchar为了清除键盘缓冲区中的回车符用的
- delete_string(str,c); //调用在其他文件中定义的delete_string函数
- print_string(str); //调用在其他文件中定义的print_string函数
- return 0;
- }
- // file2.cpp
- //
- #include "stdafx.h"
- void enter_string(char str[80]) //定义外部函数enter_string
- {
- gets_s(str,80); //向字符数组输入字符串
- }
- // file3.cpp
- //
- #include "stdafx.h"
- void delete_string(char str[],char ch) //定义外部函数delete_string
- {int i,j;
- for(i=j=0;str[i]!='\0';i++){
- if(str[i]!=ch) {
- str[j++]=str[i];
- }
- }
- str[j]='\0';
- }
- // file4.cpp
- //
- #include "stdafx.h"
- void print_string(char str[])
- {
- printf("%s\n",str);
- }
- //输入字符串"This is a C program"给字符数组str,再输入要删去的字符(空格字符),
- //程序输出已删去空格的字符串"ThisisaCprogram"。
转载于:https://blog.51cto.com/290692/1162405