当前位置:网站首页>C专家编程 第3章 分析C语言的声明 3.1 只有编译器才会喜欢的语法
C专家编程 第3章 分析C语言的声明 3.1 只有编译器才会喜欢的语法
2022-08-03 16:09:00 【weixin_客子光阴】
<<爱丽丝漫游奇境记>>
作者笔名:Lewis Carroll
作者真名:Charles Dodgson
事件:维多利亚女王
编程语言中的类型模型(type model)。例如,下面的C语言声明:
typedef char *string;
string punchline = "I'm a frayed knot";
按照骑士的思维方式,他会这样进行理解:
被称作 是
变量的类型 string char *
变量 punchline I'm a frayed knot
/*3.1 只有编译器才会喜欢的语法*/
/*Kernighan和Ritchie承认,“C语言声明的语法有时会带来严重的问题”。C语言声明的语法对于编译器(或编译器设计者)的处理来说并不是什么大不了的事。C语言声明的语法实在是非常可怕,渗透于整个语言使用的方方面面。毫不夸张地说,正是由于在组合类型方面的笨拙行为,C语言被
显著且毫无必要地复杂化了。
*/
/*C语言 类型模型(type model)
*BCPL语言(C语言的祖先)几乎没有类型,它把二进制字作为唯一的数据类型
*所以C语言先天有缺。然后出现了一种C语言设计哲学,要求对象的声明形式与它
*的使用形式尽可能相似。这种做法的好处是各种不同操作符的优先级在“声明”
*和“使用”是一样的。 它的缺点在于操作符的优先级是C语言中另外一个设计不当、
*过于复杂之处。
*/
/*一个比较好的声明指针的方法是:
*int &p;
*它至少能提示p是一个整型数的地址。这种语法已被C++采纳,用于表示参数的传址调用
*/
/*C语言的声明所存在的最大问题是,你无法以一种人们所习惯的自然方式从左向右阅读一个声明,
*在ANSI C引入了volatile和const关键字后,情况就更糟糕了
*volatile和const关键字后,只能出现在声明中,而不是使用中
*风格看上去像是声明,但却没有标识符的东西(如形式参数声明和
*强制类型转换)看上去滑稽。
*/
/*强制类型转换*/
char (*j)[20]; //j是一个指向数组的指针,数组内有20个char元素
j = (char (*)[20]) malloc(20);
//the object pointed by pointer is read_only
const int *grape;
int const *grape;
//pointer is read_only
int * const grape_jelly;
//the object pointed by pointer is read_only and pointer is also read_only
const int * const grape_jam;
int const * const grape_jam;
/*ANSI C提到,typedef说明符之所以被称为“存储类型说明符”,只是为了语法上的方便而已*/
char * const *(*next)();
你能知道如何分析这个函数的声明吗?
边栏推荐
- GTK实现旋转加载动画
- mysql delete 执行报错:You can‘t specify target table ‘doctor_info‘ for update in FROM clause
- EA 改口,称单人游戏是产品组合中“非常重要的一部分”
- protobuf 中数据编码规则
- 世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
- leetcode:202. 快乐数
- CPU个数_核心数_线程数之间的关系
- Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动
- uniapp隐藏导航栏和横屏显示设置
- Windows 事件转发到 SQL 数据库
猜你喜欢

30W 2C(JD6606S + FP6652X2)BOM

protobuf 反射使用总结

I am doing open source in Didi

机器人开发--Universal Scene Description(USD)

AI+BI+可视化,Sugar BI架构深度剖析

leetcode:189. 轮转数组

详谈RDMA技术原理和三种实现方式

2021年数据泄露成本报告解读

AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
![[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01](/img/8e/fcf79d150af4384c14a118fb209725.png)
[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01
随机推荐
MySQL查询语法
【无标题】
DAYU200 OpenHarmony标准系统HDMI全屏显示
使用 PowerShell 将 Windows 转发事件导入 SQL Server
【深度学习】今日bug(8月2)
STM32 GPIO LED和蜂鸣器实现【第四天】
【Unity入门计划】基本概念(7)-Input Manager&Input类
QT QT 】 【 to have developed a good program for packaging into a dynamic library
基于DMS的数仓智能运维服务,知多少?
C语言04、操作符
Tolstoy: There are only two misfortunes in life
面了个腾讯35k出来的,他让我见识到什么叫精通MySQL调优
【Unity入门计划】制作RubyAdventure01-玩家的创建&移动
AI+BI+可视化,Sugar BI架构深度剖析
如何设计大电流九线导电滑环
如何分析周活跃率?
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
vector类
一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
MySQL性能优化_小表驱动大表