当前位置:网站首页>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)();
你能知道如何分析这个函数的声明吗?
边栏推荐
- DataGrip:非常好用的数据库工具,安装与使用教程,亮点介绍
- 简易网络传输方法
- 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
- C语言03、数组
- 使用 PowerShell 将 Windows 转发事件导入 SQL Server
- MySQL性能优化_小表驱动大表
- MySQL窗口函数 PARTITION BY()函数介绍
- mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause
- 下午见!2022京东云数据库新品发布会
- 用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
猜你喜欢
随机推荐
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
[微信小程序开发者工具] × #initialize
How to analyze the weekly activity rate?
托尔斯泰:生活中只有两种不幸
ReentrantReadWriteLock详解
To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
WordPress建站技术笔记
Leetcode76. Minimal Covering Substring
建造者模式/生成器模式
DataGrip数据仓库工具
移动应用出海,你的“网络优化”拖后腿了吗?
【QT】Qt 给已经开发好的程序快速封装成动态库
参与便有奖,《新程序员》杂志福利来袭!
用友YonSuite与旺店通数据集成对接-技术篇2
window.open does not show favicon.icon
带你了解什么是 Web3.0
13 and OOM simulation
黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
滑环安装注意事项



![[Unity Getting Started Plan] Basic Concepts (8) - Tile Map TileMap 01](/img/8e/fcf79d150af4384c14a118fb209725.png)





