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); }
- C语言学习第六天(存储类型、宏)
- 【C语言学习】存储类型
- C语言学习重点--存储类型
- C语言再学习 -- 存储类型关键字
- C语言存储类型
- C语言存储类型
- C语言存储类型
- C语言存储类型
- c语言存储类型
- C语言存储类型
- 学习C语言的第六天
- C语言第六天
- C语言学习之二:链接属性和存储类型
- C语言学习第五天(函数、存储类型)
- c语言学习笔记---存储类型auo,register,extern,static
- C语言变量存储类型
- C语言--变量存储类型
- c语言数据存储类型
- 设计模式之状态模式
- IOS疯狂基础之MessageUI—短信
- RQNOJ-302-统计单词个数--区域dp
- 获得谷歌扩展程序crx包的方法
- APP-FND-01238
- C语言学习第六天(存储类型、宏)
- error C2662: 不能将“this”指针从“const Node_align”转换为“Node_align &”解决方案
- iOS几个网络库
- ABAP 图片预览
- singleton pattern C# 继承式 模板
- Android 如何使用GPU硬件加速
- 千万级并发实现的秘密:内核不是解决方案,而是问题所在!
- 线程的10中状态
- 在viewDidLoad里写tabbar