搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
正经夜光杯
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
YOLOv5
2
又缩水Unity7月闪促限时4折活动模块化角色模板编辑器场景美术插件拖尾怪物3D模型UI载具AI对话TPS飞机RPG和FPS202407
3
渗透测试学习路线大全
4
es基本语句详解 查询语句详解_es查询语句
5
python图书管理系统设计,python写图书管理系统_pycharm图书管理系统
6
git如何忽略指定文件以及gitignore相关知识_git更新忽略文件
7
从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍(学习笔记)_django实例教程
8
前端实现在线预览功能_el-table 前端预览文件
9
subscribeMessage.send errCode: -504002报错(云开发微信通知推送)
10
【Android 插件化】插件化简介 ( 组件化与插件化 )_android 组件化插件化原理
当前位置:
article
> 正文
MISRS C:2004编程规范:——重要知识点_逻辑运算(&&和||)的右操作数不允许包含副作用
作者:正经夜光杯 | 2024-07-16 02:05:18
赞
踩
逻辑运算(&&和||)的右操作数不允许包含副作用
MISRS C:2004编程规范:——重要知识点
MISRA C:2004建议程序中的代码段不要被“注释掉”。注释掉代码段很容易产生嵌套注释,所以应该用条件编译指令(如 #if 0…#endif)使相应的代码段失效。
MISRA C:2004要求所有#pragma指令(预处理指令)的使用应该文档化并给予解释。#pragma指令是由C标准规定的方法,用于给编译器提供额外的信息,提高了C源程序对编译器的可移植性。
MISRA C:2004明确指出++和--运算符不得和其他运算符混合使用。逻辑运算符&& 和 || 的右操作数不得带有副作用。
1、数据类型相关的编码风格
(1)必须使用typedef显示标识出各数据。不要直接使用char,int,float等基本数据类型。而应使用“特定长度”的typedef,显示的指出数据类型的大小和符号。
(2)不得使用八进制常数(0除外)或八进制转义符。(八进制常数需要在最高位加数字0,容易造成误解)
(3)简单的char类型只可用于字符类型。
(4)signed char 和 unsigned char 类型只可用于数字值。
(5)位域只能被定义为unsigned int和signed int类型。
(6)unsigned int 类型的位域至少应该为2位长度。
2、数据类型的转换
(1)对无符号字符型或无符号短整型进行~和<<位运算后,其结果应立即强制转换成操作数的基本类型。
(2)整型表达式中不允许出现以下情况的隐式数据类型转换:
无符号整型和有符号整型的转换
整型和浮点型的转换
复杂表达式的数据类型转换
从宽类型到窄类型的转换
函数返回表达式类型转换
函数实参类型转换
(3)浮点数表达式中不允许以下情况出现隐式数据类型转换:
不同位数的浮点类型转换
复杂表达式的数据类型转换
函数实参类型转换
函数返回表达式的类型转换
这两个规则广泛遵循以下原则:
有符号和无符号之间没有隐式转换
整型和浮点类型之间没有隐式转换
没有从宽到窄的隐式转换
函数参数没有隐式转换
函数的返回表达式没有隐式转换
复杂表达式没有(不同类型)隐式转换
(4)整型复杂表达式的值只能强制转换到更窄的类型且表达式的基本类型具有相同的符号。
(5)浮点类型复杂表达式的值只能强制转换到更窄的浮点数类型。
(6)后缀“U”应该用在所有unsigned 类型的常量上。
3、初始化规范
(1)自动变量在使用前都应被赋值。
(2)应该使用大括号以指示和匹配数组和结构的非零初始化构造。
(3)在枚举列表中,“=”不能显式用于除首元素之外的元素,除非所有元素都是显式初始化的。
4、指针规范
1)指针的类型转换
(1)指向不同数据类型的指针之间不能相互转换。
(2)指针转换过程中不允许丢失指针的const volatile属性。
2)指针和数组的运算
(1)只有指向数组的指针才允许进行算数计算。(仅限于指针加减某个整数)
(2)只有指向同一个数组的两个指针才允许相减。
(3)只有指向同一个数组的两个指针才允许用>,>=,<,<=等关系运算符进行比较。
(4)只允许用数组索引执行指针运算。
3)指针的有效性
(1)不允许将栈对象的地址传给外部作用域的对象。
5、表达式规范
C语言标准规定的只是运算符的结合顺序,而对于二元运算符两边的操作数的求值顺序则未定义。意味着结果可能取决于编译器的特性(从左向右解析还是从右向左解析)。
(1)表达式的值在标准所允许的任何运算次序下都应该是相同的。什么时候不同呢?(当表达式中的操作数(表达式)能影响某个共享变量,而这个共享变量又有可能导致其余操作数的值发生变化时,就需要对求值顺序进行分析。
(2)应该减少表达式对C语言运算符优先级的依赖性。应该用括号来保证运算顺序。
(3)不允许将sizeof运算符作用于有副作用的表达式上。如:j = sizeof(i = 1234)实际上在运算时被替换为:j = sizeof(int32_t),因为sizeof运算符只针对数据类型进行操作。
(4)逻辑运算(&&和||)的右操作数不允许包含副作用。
(5)逻辑运算符的操作数必须是一个主表达式。
(6)逻辑运算符(&&和||以及!)的操作数必须是一个有效的布尔值,布尔值表达式不允许进行逻辑运算以外的操作。
(7)不允许对又符号数进行位操作。
(8)移位操作的右操作数只能在0和操作数的位数减1之间。
(9)不允许无符号性的表达式使用一元负运算符。
(10)不允许使用逗号表达式。
(11)不允许对浮点型值进行位操作。
(12)不允许在同一个表达式中混合使用++和--。
6、程序流的控制规范
(1)禁止在产生布尔值的表达式中使用赋值运算符。
(2)判断一个值是否为0应该是显示的,除非操作数是一个布尔值。
(3)禁止对浮点数类型的变量或表达式做比较操作。
(4)for循环的控制表达式不应该包含浮点数类型。
(5)for循环语句的三个表达式应该仅与循环控制相关。
(6)禁止在循环中修改循环计数器。
(7)布尔表达式的值必须是可改变的。
(8)非空的switch子句都应该以break语句结束。
(9)switch语句的主体必须是复合语句(即用大括号包含)
(10)switch的最后一个子句必须是default子句,如果default中没有包含任何语句,那么应该使用注释来说明为什么没有进行任何操作。
(11)switch的 表达式中不能出现有效的布尔值类型。
(12)每一个switch语句必须至少包含一个case子句。
(13)不能存在无法执行的代码。
(14)非空语句要么必须产生副作用(side-effect)(副作用是指表达式执行后对程序运行环境造成的影响。赋值语句、自增操作等都是典型的具有副作用的操作),要么使程序流程改变。
(15)一行中如果有空语句,那么改行只能有这条空语句,不能有别的语句,并且在这条空语句前不能有注释,注释必须在其后,用空格隔开。
(16)不允许使用goto语句。
(17)不允许使用continue语句。
(18)循环体中最多只能出现一个break语句用于结束循环。
(19)函数只能有一个出口,这个出口必须在函数末尾。
(20)switch、while、do...while和for语句的主体必须是复合语句(即大括号包含),即使该主体只包含一条语句。
(21)if结构后面必须是一个复合语句,else后面必须是一个复合语句或者另一个if语句。
(22)if.....else if 结构必须由一个else子句结束。
7、函数相关规范
1)函数的定义和声明
(1)函数的每一个参数类型在声明与定义中必须一致,函数的返回类型也应一致。
(2)头文件中不允许包含对象或函数的定义。
(3)函数必须声明原型,在函数定义和调用时原型必须可见。
(4)不允许定义参数数量不确定的函数。
(5)在函数的原型声明中应该为所有参数给出标识符。
(6)函数原型中的参数与实际定义中的形参必须一致。
(7)不带参数的函数应该声明为具有void类型的参数。
2)函数的调用和使用
(1)函数不得调用本身,无论是直接调用还是间接调用。(一般禁止使用递归或预估递归层数)
(2)传递给函数的参数个数必须与函数定义的参数一致。
(3)非void函数中每一个return语句必须有返回值。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/正经夜光杯/article/detail/831866
推荐阅读
article
ERROR
1136
(
21S01
):
MySQL
的报错: 错误
1136
(
21S01
): 列的计...
MySQL
的报错: 错误
1136
(
21S01
): 列的
计数
与
value
的
计数
不相符 在第四行。desc pr...
赞
踩
article
Spring
cloud
Gateway
常用
配置
_spring
cloud
gateway路由规则
配置
...
Spring
cloud
Gateway
常用
配置
。包含路由Route、断言Predicate、过滤器Filter、等_s...
赞
踩
article
基于
Java
+
Vue
+uniapp微信小程序
火锅店
点餐
系统
设计和实现_排队
点餐
系统
设计...
社会和科技的不断进步带来更便利的生活,计算机技术也越来越平民化。二十一世纪是数据时代,各种信息经过统计分析都可以得到想要...
赞
踩
article
Column
count
doesn
’t
m
at
ch
value
count
at
row 1_my...
报错:Column
count
doesn
’t
m
at
ch
value
count
at
row 1意思是列数目跟值数目...
赞
踩
article
支付
通道
安全
:应对
黑客攻击
的
策略与实践...
在数字化经济
的
今天,
支付
通道
的
安全
性成为了企业和消费者共同关注
的
焦点。一旦
支付
通道
遭到
黑客攻击
,不仅会导致资金损失,还会...
赞
踩
article
asyncio
模块...
asyncio
模块,可以帮我们检测阻塞,实现应用程序级别的切换。_
asyncio
模块
asyncio
模块 ...
赞
踩
article
git
远程
代码
覆盖
本地
。
git
本地
代码
覆盖
远程
_
git
远程
覆盖
本地
代码...
git
远程
代码
覆盖
本地
。
git
本地
代码
覆盖
远程
_
git
远程
覆盖
本地
代码
git
远程
覆盖
本地
代码 ...
赞
踩
article
简易
区块
链_
简易
区块
加载...
// 迷你
区块
链——moniu-chain //
区块
链的生成,新建,校验// 交易// 非对称加密// 挖矿// p2...
赞
踩
article
深度
学习
+地理信息小白笔记(
matlab
实现
地物
分类)_
地物
匹配
算法
...
而
深度
学习
是在监督
学习
方法中的神经网络(Neural Network,NN)上发展而来的,具体就是通过人工神经网络(Ar...
赞
踩
article
统一
网关
Gateway
的
配置
_多人开发
gateway
怎么指定ip
访问
...
gateway
的
配置
以在idea中
的
配置
为例进行介绍_多人开发
gateway
怎么指定ip
访问
多人开发
gateway
怎...
赞
踩
article
【持续集成
_
05
课
_
Linux
部署
SonarQube
及结合
开发
项目
部署
】...
前置条件:sonarQube不能使用root账号进行启动,所以需要创建普通用户及。3)CMD上传qube文件-不能传到h...
赞
踩
article
qt
creator
创建
qml
项目
(图解)_
qt
creator
qml
...
(1)
qt
项目
文件使用pro后缀,是
qt
项目
的配置文件,它用于指定
项目
的各种参数,包括源文件、头文件、库依赖、编译选项等...
赞
踩
article
手把手带你
学习
微信
小
程序
—— (
微信
小
程序
常用代码块)_
微信
小
程序
代码
大全...
/ 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:‘_propertyChan...
赞
踩
article
新手如何拿捏
Github
Copilot
AI助手
,
帮助
你
提高
写
代码
效率...
当
你
写
下有意义的函数名和参数时
,
Copilot
会自动生成
你
需要的
代码
,
就像下图一样
,
当
你
写
下 getUrlQueryP...
赞
踩
article
白盒
测试用例
设计
...
定义白盒测试是基于程序内部逻辑结构,针对程序语句、路径、变量状态等进行测试的一种方法。白盒测试方法包括逻辑覆盖法和基本路...
赞
踩
article
傻
妞
机器人
问题
及
解决办法
【集锦】2022.6.14_收到
滑动
验证码
,
请访问以下地址完成
滑动
,
并从网络...
解决《
傻
妞
反向ws连接被关闭,关闭码1006 ,将在3000毫秒后尝试连接》解决方法:《解决服务器搭建
傻
妞
sillyGi...
赞
踩
article
基于
小
程序
的
老孙
电子
点菜
系统
开发
设计
与
实现
+ssm...
中国有着五千年文化历史,传统
的
食谱已经不能和现代化
的
社会相结合,所以我想
开发
一套关于食谱方面
的
毕业
设计
,随着人们对健康
的
...
赞
踩
article
grafana
默认
用户名
密码
_
Grafana
安装及应用详解...
官网地址:https://
grafana
.com/官方文档:https://
grafana
.com/
grafana
一、G...
赞
踩
article
将C
盘
里的
Users
文件夹
移动到D
盘
_
win11
怎么把
user
文件夹
改
d
盘
...
win11
进入系统,找到“恢复”-->立即重新启动–>疑难解答–>高级选项–>命令提示符。今天将c
盘
里的用户
文件夹
移到了...
赞
踩
article
Python
Plot
图片模糊
解决办法
_
plt
画图不清晰...
plt
.savefig('fix.jpg', dpi=300) #指定分辨率保存
_
plt
画图不清晰
plt
画图不清晰 ...
赞
踩
相关标签
spring cloud
gateway
java
vue.js
uni-app
微信小程序
火锅店点餐系统
mysql
sql
数据库
安全
sqlite
系统安全
运维
缓存
linux
python
开发语言
git
深度学习
笔记
matlab
idea
微服务