C陷阱与缺陷——第2章语法陷阱

news2024/9/23 5:15:46

1. 理解函数声明

硬件将调用首地址为0位置的子例程

(*(void(*)())0)();

任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符,声明符从表面看与表达式有些类似,对它求值应该返回一个声明中给定类型的结果。

假定变量fp是一个函数指针,那么如何调用fp所指向的函数的调用方法如下:

(*fp)();

ANSI C标准允许程序员将上式简写为fp(),但是一定要记住这种写法只是一种简写形式。

我们一旦知道如何声明一个变量,也就自然知道如何对一个常数进行类型转换,将其转型为该变量的类型:知需要在变量声明中将变量名去掉即可。

硬件将调用首地址为0位置的子例程可读性更好的写法如下:

typedef void (*funcptr)();
(*(funcptr)0)();

signal函数接受两个参数:

  • 一个整型的信号编号
  • 一个指向用户定义的信号处理函数的指针

声明signal函数:

void (*signal(int, void(*)(int)))(int);

也可以使用typedef简化上面的函数声明:

typedef void (*HANDLER)(int);
HANDLER signal(int, HANDLER);

2. 运算符的优先级问题

优先级最高的并不是真正意义上的运算符,包括数组下标、函数调用操作符、结构成员选择操作符,括号,自左向右结合。

单目运算符优先级仅次于前述运算符,自右向左结合。

单目运算符中,算术运算符最高,移位运算符次之,关系运算符再次之,接着是逻辑运算符,赋值运算符,最后是条件运算符(实际上是三目运算符)

  • 任何一个逻辑运算符的优先级低于任何一个关系运算符
  • 移位运算符的优先级比算法运算符要低,但是比关系运算符要高

运算符==和!=的优先级要低于其他关系运算符的优先级

所有的赋值运算符优先级是一样的,而且它们的结合方式是右到左

在所有的运算符中,逗号的优先级最低

3. 注意作为语句结束标志的分号

4. switch语句

switch的case后需要加上break才会退出switch,不然会继续往下执行其他case,这个特性既是优势,也是一个弱点,但不使用break时,最好加上注释

5. 函数调用

C语言要求:在函数调用时即使函数不带参数,也应该包括函数列表。

6. 悬挂else引发的问题

else始终与同一括号内最近的未匹配的if结合

通过宏定义也可以悬挂else问题:

#define IF      {if(
#define THEN    ){
#define ELSE    }else{
#define FI      }}

使用过程如下:

IF x == 0
THEN IF y == 0
     THEN error();
     FI
ELSE z = x + y;
f(&z);
IF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1264157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blazor Table 实现获取当前选中行的功能

这里需要使用到OnClickRowCallBack事件 后台使用案例

同质化严重,创新突破难,德佑湿厕纸道阻且长

撰稿|行星 来源|贝多财经 随着大众卫生健康意识的日益加深,作为日常生活必需品的纸类产品也逐步向着精细化、多元化的趋势发展,厨房用纸、婴儿用纸等面向各类特定场景和人群的新品类如雨后春笋般涌出,为市场带来了更多的可能性。 在传统卫…

自动化支付宝小程序UI测试,AirtestProject和pytest助你一臂之力!

一,前言 1,背景 因公司业务需要做支付宝小程序的UI自动化测试,于是在网上查找小程序的自动化资料,发现微信小程序是有自己的测试框架的,但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败,那就…

如何通过低代码工具,提升运输行业的运营效率和服务质量

《中国数字货运发展报告》显示,2022年我国公路货运市场规模在5万亿元左右。其中,数字货运整体市场规模约为7000亿元,市场渗透率约为15%。而以小微企业为主的货运行业,却以小、散、乱的行业特征,承载着5万亿元左右的市场…

【视觉SLAM十四讲学习笔记】第三讲——四元数

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——Eigen库 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧…

【前端首屏加载速度优化(一) :nginx 开启gzip压缩】

开启gzip压缩前后对比: nginx.conf具体配置: server {# 启动后的端口listen 8882;# 开启gzip压缩gzip on;gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x-javascript…

前端 | iframe框架标签应用

文章目录 📚嵌入方式📚图表加载显示📚100%嵌入及滑动条问题📚加载动画保留 前情提要: 计划用iframe把画好的home1.html(echarts各种图表组成的html数据大屏)嵌入整合到index.html(搭…

为第一个原生Spring5应用程序添加上Log4J日志框架!

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

如何一分钟内画好可视化图形?

一、定类数据 饼图 描述:用形状类似“饼”的形态描述数据的占比,并且参与绘制的数值没有负值,比如想要直观的查看“月生活费各个板块的占比”。 操作:以SPSSAU为例,使用“频数分析”即可。 示例: 圆环图…

使用C语言库函数qsort排序注意点

目录 题目背景错误C语言代码:正确C语言代码:注意点 题目背景 高校团委组织校园歌手比赛,进入决赛的校园歌手有10位,歌手编号从1到10进行编号。组委会随机抽取方式产生了决赛次序为:3,1,9,10,2,7,5,8,4,6。比赛现场有5个评委为参赛…

js逆向-某赞滑块

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 前言 目标网站:aHR0cHM6Ly9hY2NvdW50LnlvdXphbi5j…

3个.NET开源免费的仓库管理系统(WMS)

前言 今天给大家推荐3个.NET开源免费的WMS仓库管理系统(注意:以下排名不分先后)。 仓储管理系统介绍 仓储管理系统(Warehouse Management System,WMS)是一种用于管理和控制仓库操作的软件系统&#xff0…

Python 装饰器与偏函数

目录 装饰器 概念 简单的装饰器 复杂点的装饰器 通用装饰器 定义通用装饰器 使用装饰器 偏函数 引入类库 应用 总结 装饰器 概念 装饰器就是个闭包;把一个函数当做参数,返回一个修改过功能的函数; 本质上是一个返回函数的函数。…

同旺科技 USB 转 RS-485 适配器 -- 隔离型(定制款)

内附链接 1、USB 转 RS-485 适配器 隔离版主要特性有: ● 支持USB 2.0/3.0接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11 系统32 / 64位; ● 支持Windows …

三维gis中用纹理限定多边形地理区域

在三维 gis 中经常需要在指定的多边形地理范围内做一些操作,比如地形的多边形裁剪、压平多边形区域内的倾斜摄影模型、在指定地理范围内绘制等间距的点等。这都涉及到限定多边形区域的问题。 所谓的限定多边形地理区域,核心问题在于判断某个片元是否处于…

Python入门学习篇(四)——if详解

if详解 1 单项分支 1.1 语法结构 if 条件:逻辑代码(条件为真时执行的代码) # 注: 如果条件不满足,那么则不执行if下面的逻辑代码1.2 示例代码 username input("请输入您的用户名: ") if username "admin":print("管理员登录成功")1.3 运行…

python环境的搭建+pytharm安装教程

一、Anaconda安装 1、去官网下载anaconda >百度搜索anaconda按回车键 >找到官网地址进去(注意看网址) >下载位置 2、安装anaconda 具体就安装步骤就不演示了(写文章时已经安装好了) 二、pycharm安装 1、去官网下载py…

深信服防火墙设置应用控制策略(菜鸟必看)

PS:前几天发布了关于深信服防火墙路由部署的流程:深信服防火墙路由模式开局部署-手把手教学(小白篇)-CSDN博客 昨天晚上有csdn的朋友联系我,说有一个关于ACL访问的问题要帮忙看一下 解决了以后,写个大概的…

Python(八十九)函数的参数的内存分析

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…