// 关于变量的声明和定义
一个函数一般由两部分组成:声明部分和执行语句

在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如"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,则默认为外部函数。

有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。

 
  
  1. // file1.cpp  
  2. //  
  3.  
  4. #include "stdafx.h"  
  5.  
  6.  
  7. int _tmain(int argc, _TCHAR* argv[])  
  8. {  
  9.     extern void enter_string(char str[]);               //对函数的声明  
  10.     extern void delete_string(char str[],char ch);  
  11.     extern void print_string(char str[]);  
  12.     //以上3行声明在本函数中将要调用的已在其他文件中定义的3个函数  
  13.     char c,str[80];  
  14.     enter_string(str);          //调用在其他文件中定义的enter_string函数  
  15.     //scanf_s("%c",&c);         输入要求删去的字符  
  16.     //scanf把最后一次的回车当成了输入符  
  17.     c = getchar();  
  18.     //getchar为了清除键盘缓冲区中的回车符用的  
  19.     delete_string(str,c);       //调用在其他文件中定义的delete_string函数  
  20.     print_string(str);          //调用在其他文件中定义的print_string函数  
  21.     return 0;  
  22. }  
  23.  
  24. // file2.cpp  
  25. //  
  26.  
  27. #include "stdafx.h"  
  28.  
  29.  
  30. void enter_string(char str[80])         //定义外部函数enter_string  
  31. {  
  32.     gets_s(str,80);                         //向字符数组输入字符串  
  33. }  
  34.  
  35. // file3.cpp  
  36. //  
  37.  
  38. #include "stdafx.h"  
  39.  
  40.  
  41. void delete_string(char str[],char ch)          //定义外部函数delete_string  
  42. {int i,j;  
  43. for(i=j=0;str[i]!='\0';i++){  
  44.     if(str[i]!=ch) {  
  45.         str[j++]=str[i];  
  46.     }  
  47.   }  
  48. str[j]='\0';  
  49. }  
  50.  
  51. // file4.cpp  
  52. //  
  53.  
  54. #include "stdafx.h"  
  55.  
  56.  
  57. void print_string(char str[])  
  58. {  
  59.     printf("%s\n",str);  
  60. }  
  61.  
  62. //输入字符串"This is a C program"给字符数组str,再输入要删去的字符(空格字符),  
  63. //程序输出已删去空格的字符串"ThisisaCprogram"。