提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
define和typedef在C语言之中经常使用,浅谈一下define和typedef
一、define
1.define是什么?
在我们写代码的日常之中,我们经常会用到define去配合数组的定义使用。
#define N 10
a[N]={0};
但define不仅仅是能做这些
2.define工作原理
#define是一种宏,那么我们首先要先了解一下宏定义。
宏定义一般作用在C语言的预处理部分,而预处理的主要任务,例如删除注解,插入被#include包含的函数库,自己的头文件名等,而在预处理阶段我们就会把我们#define定义N变成10,所以与此同时在后面的编译链接等步骤就会看不见define
在预处理阶段,define只会替换,不会做任何的算计逻辑等处理 如:
#include<stdio.h>
#define N 1+5
int main()
{
printf("%d",N*N);
}
其处理结果不是6*6等于36,而是1+5*1+5等于11
二.typedef是什么?
1.typedef是什么?
在我们写代码之中,我们在学习结构体数据结构的时候,我们应为变量名太长,我们就会用一个短的变量名来代替那个长的变量名struct snode变量名用ptr变量名来代替
typedef struct snode
{
int a;
struct snode* next;
}ptr;
2.typedef工作原理
在C语言之中,typedef为一种关键字,与存储有关的关键字,与 auto、extern、static、register 等关键字不能出现在同一表达式之中
其主要作用还是创建别名用于简化复杂的变量名
三、define和typedef
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR i, j;
int_ptr x, y;
在上面代码中,i,j,x,y四个常量的数组类型哪一个是int*数据类型
答案为j是int型,二i,x,y这个常量为int*类型,为什么?
在#define这个宏,在预处理阶段将会转化为
#define INT_PTR int*
INT_PTR i,j
int* i,j;
从而对与i是int*类型,j为int型,其根本位*是一个单目操作符*就会先和i结合
而对于typedef int* int_ptr; int_ptr x,y 中,x,y为int*类型
本文探讨了C语言中#define和typedef的用途和工作原理。#define是宏定义,主要在预处理阶段进行文本替换,不涉及类型检查。typedef则用于创建类型别名,有助于简化复杂变量名,并与类型系统关联。在示例中,i, x, y被定义为int*类型,而j为int类型。
522

被折叠的 条评论
为什么被折叠?



