当前位置:网站首页>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)();
你能知道如何分析这个函数的声明吗?
边栏推荐
- 【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
- C语言01、数据类型、变量常量、字符串、转义字符、注释
- 30W 2C(JD6606S + FP6652X2)BOM
- Leetcode76. Minimal Covering Substring
- 技术干货|如何将 Pulsar 数据快速且无缝接入 Apache Doris
- 使用 PowerShell 将 Windows 转发事件导入 SQL Server
- leetcode:202. 快乐数
- ReentrantReadWriteLock详解
- ffplay视频播放原理分析
- 用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
猜你喜欢
随机推荐
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
【无标题】
实时渲染流程操作复杂吗,如何实现?
leetcode:187. 重复的DNA序列
Ruoyi Ruoyi framework @DataScope annotation use and some problems encountered
QT QT 】 【 to have developed a good program for packaging into a dynamic library
"Avnet Embedded Weekly" Issue 276: 2022.07.25--2022.07.31
Tolstoy: There are only two misfortunes in life
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
Kubernetes 笔记 / 目录
CPU个数_核心数_线程数之间的关系
mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause
攻防世界----bug
移动应用出海,你的“网络优化”拖后腿了吗?
详谈RDMA技术原理和三种实现方式
不可忽略!户外LED显示屏的特点及优势
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【Unity入门计划】基本概念(7)-Input Manager&Input类
字典表(还需要输入2个字)
为教育插上数字化的翅膀,网易云信发布「互联网+教育」整体解决方案