当前位置:网站首页>C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
2022-08-03 16:09:00 【weixin_客子光阴】
/*3.7 typedef struct foo {...foo;}的含义 */
/*C 语言存在多种名字空间:
*标签名(label name);
*标签(tag)---这个名字空间用于所有的结构、枚举和联合
*成员名---每个结构或联合都有自身的名字空间;
*其他
*/
/*在同一个名字空间里,任何名字必须具有唯一性,但在不同的名字空间
*可以存在相同的名字。
*/
/*
struct vnode {
long v_flag;
long v_usecount;
struct vnode *v_freef;
struct vnode *v_op;
};
*/
#include <stdio.h>
struct foo {
int foo;
int foo2;
} foo;
int main() {
printf("sizeof(foo) = %d, sizeof(int) = %d\n", sizeof(foo), sizeof(int));
}
/* 输出:
*/
/*sizeof(foo)中的foo代表的是一种结构类型的变量*/
//合法的
typedef struct baz {
int baz;
} baz;
struct baz variable_1;
baz variable_2;
typedef struct my_tag{
int i;
}my_type;
struct my_tag variable_1;
my_type variable_2;
这个typedef声明引入了my_type这个名字作为struct my_tag{int i;}的简写形式。但它同时也引入了结构标签my_tag,在它前面加个关键字struct可以表示同样的意思。如果你用同一个标识符表示结构类型和typedef声明引入的标签,那么以后使用这个标识符时前面就不用加上关键字struct了,但这个方法向人们灌输了一种完全错误的思维习惯。令人不快的是,这种与结构有关的typedef声明的语法确切地反映了组合结构类型与变量声明的语法。
typedef struct fruit{int weight, price_per_lb;} fruit;
/*语句1*/
struct veg{
int weight, price_per_lb;
} veg; /*语句2*/
struct fruit mandarin; /*使用结构标签“fruit”*/
fruit mandarin; /*使用结构类型“fruit”*/
struct veg potato;
//error
veg cabbage;
int i;
//error
i j;
/*小启发*/
/*操作typedef的提示*/
/*不要为了方便起见而为结构使用typedef*/
/*typedef应该使用在一下几个方面:
*数组、结构、指针以及函数的组合类型
*可移植类型。比如当你需要一种至少20比特的类型时,可以让他成为typedef的类型
*这样,当把代码移植到不同的平台时,要选择正确的类型,如short、int、long时,
*只要在typedef中进行修改就可以了,无须对每个声明都加以修改。
*typedef也可以为后面的强制类型转换提供一个简单的名字,如:
*/
typedef int (*ptr_to_int_fun)(void);
char *p; ...
= (ptr_to_int_fun)(p);
/*应该始终在结构的定义中使用结构标签,即使它并非必需的*/
/*当你有两个不同的东西时,在计算机科学中一个比较好的原则就是用不同的名字
*来称呼他们*/
边栏推荐
猜你喜欢
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
蒋松廷 荣获第六季完美童模全球总决赛 全球总冠军
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
protobuf 反射使用总结
MySQL相关介绍
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
30W 2C(JD6606S + FP6652X2)BOM
使用Make/CMake编译ARM裸机程序(基于HT32F52352 Cortex-M0+)
TCP 可靠吗?为什么?
How to analyze the weekly activity rate?
随机推荐
实时渲染流程操作复杂吗,如何实现?
甲方不让用开源【监控软件】?大不了我自己写一个
【QT】Qt 给已经开发好的程序快速封装成动态库
Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时
不可忽略!户外LED显示屏的特点及优势
socket快速理解
To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
CopyOnWriteArrayList details
WordPress建站技术笔记
我写了个”不贪吃蛇“小游戏
C语言03、数组
Detailed explanation of ReentrantReadWriteLock
Some optional strategies and usage scenarios for PWA application Service Worker caching
土耳其国防部:联合协调中心将对首艘乌克兰粮船进行安全检查
如何选择合适的导电滑环型号
常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
MPLS的wpn实验
Kubernetes 笔记 / 生产环境
Kubernetes 笔记 / 目录
JD6606SP5_JD6606SSP_JD6606SASP_JD6621W7百盛新纪元授权代理商