2021-05-15 对C语言关键字宏定义的理解
Posted Suk_god
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-05-15 对C语言关键字宏定义的理解相关的知识,希望对你有一定的参考价值。
对C语言关键字、宏定义的理解
C语言关键字
C常见关键字
auto , break , case, char , const , continue , default , do , double , else , enum , extren , float , for , goto , if , int , long , register , return , short , signed , sizeof , static , struct , switch , typedef , union , unsigned , void , volatitle , while
关键字typedef
typedef顾名思义是类型定义,这里应该理解为类型重命名
例如:
//将unsigned int 重命名为uint_32,所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
rreturn 0;
}
使用 typedef 的注意事项:
1、typedef 不可滥用、乱用
比如:
typedef int i;
int main()
{
//这样的“简化”很鸡肋,会让代码可读性大幅度降低。
int i = 0;
i j = 0;
return 0;
}
2、typedef 常用来定义结构体
比如:
typedef struct Student
{
chat name[20];
int age;
char sex[5];
double weight;
}stu;
int main()
{
//以下两种方式定义结构体效果相同,但第二种明显方便
struct Student tom;
stu jack;
return 0;
}
关键字static
在C语言中:
static 是用来修饰变量和函数的
修饰局部变量–静态局部变量
修饰全局变量–静态全局变量
修饰函数–静态函数
修饰局部变量
//代码1
#include <stdio.h>
void test()
{
int i =0;
i++;
printf("%d ",i);
}
int main()
{
int i=0;
for(i=0;i<10;i++)
{
test();
}
//结果是:1 1 1 1 1 1 1 1 1 1
return 0;
}
//代码2
#include <stdio.h>
void test()
{
//static 修饰局部变量
static int i =0;
i++;
printf("%d ",i);
}
int main()
{
int i=0;
for(i=0;i<10;i++)
{
test();
}
//结果是:1 2 3 4 5 6 7 8 9 10
return 0;
}
结论:
static修饰局部变量,将该变量的生命周期改为全局,但作用域不变
修饰全局变量
//代码1
//add.c文件内定义全局变量
int g_val = 2021;
//test.c文件内引用add.c文件内的全局变量
//声明
extern int g_val;
int main()
{
printf("%d\\n",g_val);//2021
return 0;
}
//代码2
//add.c文件内定义全局变量
static int g_val = 2021;
//test.c文件内引用add.c文件内被static修饰全局变量
//声明
extern int g_val;
int main()
{
printf("%d\\n",g_val);//报错
return 0;
}
结论:
1、全局变量:在整个程序内有效
2、static修饰全局变量之后,代表该变量只在定义文件内有效,只能在本文件内被使用,不能在其他文件内被使用。
修饰函数
//代码1
//add.c文件内定义函数
int add(int x,int y)
{
return x+y;
}
//test.c文件内引用add.c文件内的函数
int main()
{
printf("%d",add(2,3));//5
return 0;
}
//代码2
//add.c文件内定义函数
static int add(int x,int y)
{
return x+y;
}
//test.c文件内引用add.c文件内被static修饰的函数
int main()
{
printf("%d",add(2,3));
//编译时出现连接性错误
return 0;
}
结论:
一个函数被static修饰,说明这个函数只在本文件内有效,不能在其他源文件内使用
注:剩余关键字今后学习到会再补充
define 定义常量和宏
主要特点:
便于后期代码维护
//define 定义标识符常量
#define MAX 1000
简要说明:
宏定义的常量名通常采用全大写的命名方式,并且做到见名知义的效果
//define 定义宏
#define ADD1(X,Y) ((X)+(Y))
#define ADD2(X,Y) X+Y
简要说明:
宏替换:ADD1(x,y) ((x)+(y))
1、命名方式及要求与常量一致
2、x,y是两个占位符号,在引用宏时用户输入的对应数据替换x,y
比如;
ADD1(2,3):2->x,3->y,((2)+(3))->((x)+(y))
3、int num = 10ADD2(2,3):
对于这个表达式来说我们预期得到的结果是50;但实际结果是23
替换过程如下:
num = 102+3
注意:在定义宏的时候,对于每一个元素都应该带上圆括号来保证我们程序的正确性!规范写法:ADD(x,y) ((x)+(y))
不要吝啬圆括号的使用~~~
小试牛刀
//define 定义标识符常量
#define MAX 1000
//define 定义宏
#define ADD(X,Y) ((X)+(Y))
#include<stdio.h>
int main()
{
int sum = ADD(2,3);
printf("%d\\n",sum);//5
sum = 10*ADD(2,3);//50
printf("%d\\n",sum);
return 0;
}
以上是关于2021-05-15 对C语言关键字宏定义的理解的主要内容,如果未能解决你的问题,请参考以下文章