4.关键字

C语言常见关键字:

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

extern

1. extern用于声明外部变量

test.c:

int num = 998;

main.c:

#include <stdio.h>
extern int num;
int main() {
	printf("%d\n", num);
	return 0;
}

extern用于声明外部变量,这样就可以跨文件访问变量

2. extern用于声明外部函数

test.c:

int num = 998;

int max(int a, int b) {
    return a > b ? a : b;
}

main.c:

#include <stdio.h>
extern int num;
extern int max(int a, int b);
int main() {
	printf("%d\n", num);
	printf("%d\n", max(num, 10000));
	return 0;
}

extern用于声明外部变量,这样就可以跨文件访问函数

typedef

typedef用于类型重定义,说大白话就是类型重命名

上一篇文章3.循环和操作符的 . 结构成员访问符的例子就用到了typedef关键字

我们定义一个结构体:

struct person {
	int age;
	char name[10];
};

结构体实例化时:

struct person person1 = {17, "denny"};

比较麻烦

因此类型重定义

typedef struct person {
	int age;
	char name[10];
}person;

定义时:

person person2 = {18, "freen"};

这样就很方便代码也更简洁

类型重定义之后既可以使用新的类型名,又可以使用重定义之前的类型名定义变量如下:

#include <stdio.h>
typedef struct person {
	int age;
	char name[10];
}person;
int main() {
	struct person person1 = {17, "denny"};
	person person2 = {18, "freen"};
	printf("{%d, %s}\n", person1.age, person1.name);
	printf("{%d, %s}\n", person2.age, person2.name);
	return 0;
}
static
static修饰全局变量

全局变量和static修饰的全局变量比较:

static修饰全局变量改变了链接属性:static修饰全局变量改变了其可见性,只能被该全局变量定义的文件访问

extern用于声明的外部变量不能是静态全局变量,编译会报错

static修饰局部变量

static修饰局部变量改变了其生命周期但是并未改变其作用域:static修饰局部变量使其生命周期和整个程序相同,作用域并未改变只能在其局部作用域内被访问到

我们再看上一篇文章3.循环和操作符就可以知道为什么for循环的例子输出结果使23456了

static修饰函数

static修饰函数改变了链接属性:static修饰函数改变了其可见性,只能被该函数定义了的文件访问

extern用于声明的外部函数不能是静态函数,编译也会报错

特别注意:

define

在C语言中define不是关键字。define是编译器的预编译指令,是编译器实现的,不是C语言的内容

除了define可以定义常量外,还可以定义宏,宏的使用类似于函数,实际宏在预编译阶段 1会发生一件事情就是宏替换

#define ADD1(x, y) x+y
#define ADD2(x, y) (x+y)
#include <stdio.h>
int main()
{
	int sum = 0;
	sum = 10 * ADD1(2, 3);
	printf("sum = %d\n", sum);
	sum = 10 * ADD2(2, 3);
	printf("sum = %d\n", sum);
	return 0;
}

以上代码执行后的结果是23 50,原因:宏替换

C语言常见关键字:

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

extern

1. extern用于声明外部变量

test.c:

int num = 998;

main.c:

#include <stdio.h>
extern int num;
int main() {
	printf("%d\n", num);
	return 0;
}

extern用于声明外部变量,这样就可以跨文件访问变量

2. extern用于声明外部函数

test.c:

int num = 998;

int max(int a, int b) {
    return a > b ? a : b;
}

main.c:

#include <stdio.h>
extern int num;
extern int max(int a, int b);
int main() {
	printf("%d\n", num);
	printf("%d\n", max(num, 10000));
	return 0;
}

extern用于声明外部变量,这样就可以跨文件访问函数

typedef

typedef用于类型重定义,说大白话就是类型重命名

上一篇文章3.循环和操作符的 . 结构成员访问符的例子就用到了typedef关键字

我们定义一个结构体:

struct person {
	int age;
	char name[10];
};

结构体实例化时:

struct person person1 = {17, "denny"};

比较麻烦

因此类型重定义

typedef struct person {
	int age;
	char name[10];
}person;

定义时:

person person2 = {18, "freen"};

这样就很方便代码也更简洁

类型重定义之后既可以使用新的类型名,又可以使用重定义之前的类型名定义变量如下:

#include <stdio.h>
typedef struct person {
	int age;
	char name[10];
}person;
int main() {
	struct person person1 = {17, "denny"};
	person person2 = {18, "freen"};
	printf("{%d, %s}\n", person1.age, person1.name);
	printf("{%d, %s}\n", person2.age, person2.name);
	return 0;
}
static
static修饰全局变量

全局变量和static修饰的全局变量比较:

static修饰全局变量改变了链接属性:static修饰全局变量改变了其可见性,只能被该全局变量定义的文件访问

extern用于声明的外部变量不能是静态全局变量,编译会报错

static修饰局部变量

static修饰局部变量改变了其生命周期但是并未改变其作用域:static修饰局部变量使其生命周期和整个程序相同,作用域并未改变只能在其局部作用域内被访问到

我们再看上一篇文章3.循环和操作符就可以知道为什么for循环的例子输出结果使23456了

static修饰函数

static修饰函数改变了链接属性:static修饰函数改变了其可见性,只能被该函数定义了的文件访问

extern用于声明的外部函数不能是静态函数,编译也会报错

特别注意:

define

在C语言中define不是关键字。define是编译器的预编译指令,是编译器实现的,不是C语言的内容

除了define可以定义常量外,还可以定义宏,宏的使用类似于函数,实际宏在预编译阶段 2会发生一件事情就是宏替换

#define ADD1(x, y) x+y
#define ADD2(x, y) (x+y)
#include <stdio.h>
int main()
{
	int sum = 0;
	sum = 10 * ADD1(2, 3);
	printf("sum = %d\n", sum);
	sum = 10 * ADD2(2, 3);
	printf("sum = %d\n", sum);
	return 0;
}

以上代码执行后的结果是23 50,原因:宏替换

auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while


  1. C语言编译过程 ↩︎

  2. C语言编译过程 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值