C语言学习第六天(存储类型、宏)

来源:互联网 发布:软件 地图 编辑:程序博客网 时间:2024/04/28 19:49

register:一般情况下不会使用到。

这个存储类型的意思是:优先将这个类型的变量存放在CPU的寄存器里,需要用时直接从寄存器里拿。寄存器的速度比内存快很多。

#include <stdio.h>main(){    int a = 5,i;   for(i=1;i<=a;i++)    {        printf("%d",jic(i));    }    return 0;}        int jic(int a){    register int  x=1,i;    for(i=1;i<=a;i++)    {        x = x*i;    }     return x;}

只有局部自动变量和形参可以作为寄存器变量,其他(全局变量不行)。再调用一个函数时占用一些寄存器存放值,结束后释放,在调用时另一个函数时又可以利用它存放该函数的寄存器变量。

1.只有局部自动变量和形式参数可以作为寄存器变量。

2.不能定义任意多个寄存器变量,因为计算机系统中寄存器数目有限。

3.局部静态变量不能定义为寄存器变量,一个变量只能声明为一个存储类别

对register了解即可。


extern:

外部变量即全局变量,作用域从变量定义开始到本程序文件的末尾,编译时将外部变量分配在静态存储区。

有时需用extern声明外部变量,以扩展变量作用域。

如果变量不在开头定义,想在定义前的函数应用该外部变量需用extern声明,类型名可以省略。

#include<stdio.h>int max(int x,int y){    int z;    z=x>y?x:y;    return(z);}main(){    extern A,B;            printf("%d",max(A,B));}int A=13,B=8;

在一个文件file1中定义了外部变量,而想在另一个文件file2中引用它,可以在另一个文件file2中对此外部变量进行extern声明。这样两个文件都可以引用这个外部变量。这是用extern将外部变量作用域扩展到其它文件中。


如果想使一个外部变量只在一个文件中使用,而不能被其它文件引用,可以在定义外部变量时加一个static声明。这种只能用于本文件的外部变量(全局变量)成为静态外部变量。

声明部分出现的变量有两种情况:

一是需要建立存储空间的,称为定义性声明(如int a;);

二是不需要建立存储空间的,称为引用性声明(如extern a;)。

外部变量只能由一次定义,但可以多次声明。

用static声明一个变量的作用有二:

1.对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;

2.全局变量用static声明,则该变量的作用域只限于本文件。



C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译,它们不是C语言的组成部分。

宏定义:#标识符 字符串

宏终止:undef 标识符


#include <stdio.h>#define R 3#define S(K,A,B) A=3*R+K;B=2*R+Kint main(){    float a,b,k;    scanf("%f",&k);           S(k,a,b);    printf("%f",a);}

宏的用法:

一般用宏代表简短的表达式如下:

#include <stdio.h>#define MAX(A,B) (A)>(B)?(A):(B)        main(){        int a,b;    a=4;b=13;    int num = MAX(a,b);    printf("%d",num);        }

实现对程序的简化,如事先定义好“输出格式”。

#include <stdio.h>#define PR printf#define D "%d"#define N ""#define D1 D N#define D2 D D N    main(){    /*    int a,b;    a=4;b=13;    int num = MAX(a,b);    printf("%d",num);    */    int a,b,c ;    a = 3;b=4;    PR(D1,a);    PR(D2,a,b);    }