1、常量

  • 常量:常量是固定值,不能被重新赋值,在程序执行期间不会改变

    define

  • define方式定义常量,预处理命令/宏定义命令

  • 常量一般大写

    1. #include <stdio.h>
    2. // 定义数值常量
    3. #define LENGTH 10
    4. #define WIDTH 5
    5. // 定义单个字符
    6. #define NEWLINE '\n'
    7. // 定义字符串常量
    8. #define NAME "Jack"
    9. int main(int argc, const char * argv[]) {
    10. printf("%d\n",LENGTH*WIDTH );
    11. printf("%s\n",NAME);
    12. printf("%c",NEWLINE);
    13. return 0;
    14. }

    const

  • const方式定义常量

    1. int main(){
    2. const int LENGTH = 10;
    3. const int WIDTH = 5;
    4. const char NEWLINE = '\n';
    5. int area;
    6. area = LENGTH * WIDTH;
    7. printf("value of area : %d", area);
    8. printf("%c", NEWLINE);
    9. return 0;
    10. }

    2、变量

  • 变量的声明有两种情况:

    1. 一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间
    2. 另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它

      extern int i; //声明,但没有建立存储空间 int i; //声明,已经建立存储空间

  • 外部变量

    1. #include <stdio.h>
    2. // 函数外定义变量x y
    3. int x ;
    4. int y ;
    5. int add(){
    6. // 函数内声明使用外部变量,并赋值
    7. extern short x = 3;
    8. extern int y = 5;
    9. return x+y;
    10. }
    11. int main(int argc, const char * argv[]) {
    12. printf("%d\n",add() );
    13. return 0;
    14. }

    extern

  • 我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。它的存储方式为静态存储,其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。

  • 然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

extern用法1:使用本文件后定义的全局变量

  1. #include <stdio.h>
  2. int max(int x, int y);
  3. int main(int argc, const char * argv[]) {
  4. // 此处注释掉会报错
  5. //extern int g_x;
  6. //extern int g_y;
  7. int result = max(g_x,g_y);
  8. printf("%d\n",result);
  9. return 0;
  10. }
  11. int g_x = 10;
  12. int g_y = 20;
  13. int max(int x, int y){
  14. return (x>y ? x : y);
  15. }

extern用法2:使用其他文件中定义的全局变量

  1. /******************hello.c/******************/
  2. #include <stdio.h>
  3. #include "max.c"
  4. /*定义两个全局变量*/
  5. int g_X=10;
  6. int g_Y=20;
  7. int max();
  8. int main(void)
  9. {
  10. int result;
  11. result = max();
  12. printf("the max value is %d\n",result);
  13. return 0;
  14. }
  15. /******************max.c/******************/
  16. /*外部变量声明*/
  17. extern int g_X ;
  18. extern int g_Y ;
  19. int max()
  20. {
  21. return (g_X > g_Y ? g_X : g_Y);
  22. }