当前位置:网站首页>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入门计划】制作RubyAdventure01-玩家的创建&移动
- 83. Remove Duplicates from Sorted List
- 土耳其国防部:联合协调中心将对首艘乌克兰粮船进行安全检查
- How to analyze the weekly activity rate?
- leetcode:187. 重复的DNA序列
- QT QT 】 【 to have developed a good program for packaging into a dynamic library
- 移动应用出海,你的“网络优化”拖后腿了吗?
- 【There is no tracking information for the current branch. Please specify which branch you want to 】
- C语言04、操作符
- 13、OOM模拟
猜你喜欢
I am doing open source in Didi
MATLAB | 一种简易的随机曼陀罗图形生成函数
为教育插上数字化的翅膀,网易云信发布「互联网+教育」整体解决方案
出海季,互联网出海锦囊之本地化
Small Tools(4) 整合Seata1.5.2分布式事务
【深度学习】今日bug(8月2)
SQL中对 datetime 类型操作
使用Make/CMake编译ARM裸机程序(基于HT32F52352 Cortex-M0+)
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
用友YonSuite与旺店通数据集成对接-技术篇2
随机推荐
参与便有奖,《新程序员》杂志福利来袭!
可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案
[微信小程序开发者工具] × #initialize
简易网络传输方法
C语言04、操作符
Small Tools (4) integrated Seata1.5.2 distributed transactions
Not to be ignored!Features and advantages of outdoor LED display
托尔斯泰:生活中只有两种不幸
Kubernetes 笔记 / 目录
MySQL性能优化_小表驱动大表
ffplay视频播放原理分析
mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause
【翻译】关于扩容一个百万级别用户系统的六个课程
罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
Ruoyi Ruoyi framework @DataScope annotation use and some problems encountered
带你了解什么是 Web3.0
Detailed ReentrantLock
How to analyze the weekly activity rate?
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
我写了个”不贪吃蛇“小游戏