漫谈:C语言 C++ 迷惑的语句、分号、大括号

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


        C语言设计得很麻拐。

        初学者经常面临这样的麻烦:

  • 多了一个分号,if条件没通过却执行了
  • 少了一个分号,编译不下去,报奇怪的错误
if(a>0);++x;

        这个代码的“++x”无论如何都会被执行,旁观者很快就能看出来是因为if语句后面多了一个分号。

struct A
{int a;
}

        这个代码会导致其后的代码(甚至是另外一个文件,取决于头文件包含顺序)编译出错,错误信息无法理解,焦头烂额中,有经验的程序员马上会去想“是不是哪个类后面少了一个分号?”

        从这两个典型BUG入手,我们来深入研究一下C语言的“语句、分号、大括号”究竟是什么。

        C语言的源代码(.h和.c文件)包含这么几部分内容:注释、预处理指令、编译器指令、语句、函数定义。

        注释我们当然很清楚,不算在代码里面的,没什么结束符要求。

        预处理指令和编译器指令也不是参与编译的代码,以“#”开头,没有结束符要求。

        预处理之后.c文件包含的头文件被展开,形成一个完整的源文件,里面只有要编译的语句和函数定义。为什么特别把“函数定义”单列出来,因为函数定义的结尾是不需要加分号的。

        语句分两种:

  1. 简单语句以分号结束,单独一个分号也是语句(什么都不执行的空语句)。
  2. 复合语句用大括号包裹,大括号后面不需要分号,大括号里面每个简单语句都需要分号。

        语句的其它关键点:

  • 声明、定义都是语句
  • 结构、类的定义也是语句,而且是简单语句,所以大括号后面要加分号
  • if()for(;;)while()这三个的括号里面是表达式、不是语句,所以不能出现大括号
  • if/for/while/do while的执行体是语句,可以是简单语句也可以是复合语句

        例外:

  • 函数定义的大括号后面是不需要分号的,当然有也没关系
  • C++的namespace的大括号后面也不需要分号,因为namespace不是语句

        编程建议:

  • if/for/while/do while执行体必须使用大括号
  • 定义struct/class习惯性先加上分号


(这里是结束)

        

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

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

相关文章

博客永久链接与计数

概述 工欲善其事,必先利其器。 对自己的博客不好用不满意很久了,但是这几年太懒。想趁着放假弄一下吧,发现几年没动,版本升级后很多东西变了,折腾了一下午效果不太理想。先记录一下。 问题 博客链接中有中文&#x…

2024软考系统架构师-案例题分享2(带答案)

索引 试题一. 质量属性试题二. UML图试题三. 系统可靠性试题四. 数据库设计试题五. Web系统架构设计试题一. 质量属性 试题一(25分)阅读以下关于软件架构设计的叙述,在答题纸上回答问题 1~3。 【说明】某软件公司为某品牌手机厂商开发一套手机应用程序集成开发环境,以提高开…

STM32 DCMI 的带宽与性能介绍

1. 引言 随着市场对更高图像质量的需求不断增加,成像技术持续发展,各种新兴技术(例如3D、计算、运动和红外线)的不断涌现。如今的成像应用对高质量、易用性、能耗效率、高集成度、快速上市和成本效益提出了全面要求。为了满足这些…

【算法一则】做算法学数据结构 - 简化路径 - 【栈】

目录 题目栈代码题解 题目 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.)表…

Cesium 无人机航线规划

鉴于大疆司空平台和大疆无人机app高度绑定,导致很多东西没办法定制化。 从去年的时候就打算仿大疆开发一套完整的平台,包括无人机app以及仿司空2的管理平台,集航线规划、任务派发、实时图像、无人机管理等功能的平台。 当前阶段主要实现了&…

突破编程_前端_SVG(circle 圆形)

1 circle 元素的基本属性和用法 SVG 的 <circle> 元素用于在SVG文档中绘制圆形。它具有几个基本属性&#xff0c;允许定义圆形的大小、位置、填充颜色和边框样式。以下是 <circle> 元素的基本属性及其详细解释&#xff1a; 1.1 cx 和 cy 描述&#xff1a;这两个…

软件可靠性测试

1.软件可靠性测试概述 软件可靠性测试由可靠性目标的确定、运行剖面的开发、测试用例的设计、测试实施、测试结果的分析等主要活动组成。 软件可靠性测试还必须考虑对软件开发进度和成本的影响&#xff0c;最好是在受控的自动测试环境下&#xff0c;由专业测试机构完成。 软件可…

记录一次Java中使用P12证书访问https,nginx返回403的问题

目录 1、先使用浏览器导入证书访问&#xff0c;测试证书和密钥是否正确2、编写初始java代码3、结果响应 403 Forbidden4、解决方案 1、先使用浏览器导入证书访问&#xff0c;测试证书和密钥是否正确 成功返回&#xff0c;说明p12证书和密钥是没问题的。 2、编写初始java代码 …

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于OpenMax实现了视频硬件编解码驱动&#xff0c;提供Codec基础能力接口给上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

oracle创建整个数据库的只读账户

在源用户readonly 下创建只读用户 reader readonly 的表空间为AA 一、创建只读用户 create user reader identified by 密码 default tablespace AA; 二、授权 grant connect to reader ; 三、获取原账号readonly 的查询权限 select grant select on ||owner||.||object…

AI重构你的方方面面

看了最近相关AI的资料&#xff0c;大家也踊跃参与AI技术的讨论。 我们要拨开问题看本质&#xff0c; 其实AI技术本身来说就是人的智慧的结晶和一个替代或者说是一个更优的生产工具。 消费者的思维是以后能够买到通过AI设计生产售卖的更好更便宜的商品就好了&#xff1b; 劳动…

【面试题】redis在工作中的使用场景有哪些?

前言&#xff1a;在实际工作中&#xff0c;Redis作为一种高性能的内存数据库和缓存系统&#xff0c;可以应用于多种场景&#xff0c;同时在面试过程中也经常被问到类似的问题&#xff0c;我们经常会被问的一脸懵逼&#xff0c;那今天我们就来总结一下redis的一些使用场景。 数据…

实战解析:SpringBoot AOP与Redis结合实现延时双删功能

目录 一、业务场景 1、此时存在的问题 2、解决方案 3、为何要延时500毫秒&#xff1f; 4、为何要两次删除缓存&#xff1f; 二、代码实践 1、引入Redis和SpringBoot AOP依赖 2、编写自定义aop注解和切面 3、application.yml 4、user.sql脚本 5、UserController 6、U…

基于ssm微信小程序的医院挂号预约系统

采用技术 基于ssm微信小程序的医院挂号预约系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 用户管理 医院管理 医生管理 公告资讯管理 科室信息管…

上海计算机学会 2023年9月月赛 乙组T4 组合数(组合数学)

第四题&#xff1a;T4组合数 标签&#xff1a;组合数学题意&#xff1a;求组合数 C n m C_n^m Cnm​&#xff0c;即从 n n n个不同的数字中取出 m m m个数字的方案数&#xff0c;结果对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取模&#xff08; 1 ≤ m ≤ n ≤ 1 0 …

IMU状态预积分的雅克比矩阵

IMU状态预积分的雅克比矩阵 预积分的雅克比矩阵 预积分的雅克比矩阵 最后讨论预积分相对状态变量的雅克比矩阵。由于预积分测量已经归纳了IMU在短时间内的读数&#xff0c;因此残差相对于状态变量的雅克比矩阵推导则简单。 首先考虑旋转。 旋转与Ri,Rj和 b g , i b_{g,i} bg,i…

Collections.synchronized * 是什么方法?Collections.synchronized* 中的方法和并发集合类有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Collections.synchronized * 是什么 Collections.synchronized* 是 Java 集合框架(Java Collections Framework)中提供的一组静态方法,用于将非…

【拓展技术】——AutoDL服务器训练Pycharm使用注意点Pycharm配置AutoDL

一、AutoDL服务器模型训练 AutoDL是一个为研究人员、开发者和企业提供的平台&#xff0c;它致力于提供一个高效、可靠和易用的环境&#xff0c;以支持复杂的计算任务和AI模型的部署&#xff1a; 高效的并行计算资源&#xff1a;AutoDL拥有强大的计算集群和高性能的计算节点&a…

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件 往期回顾 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 一、最终…

C++ 类和对象 上

目录 前言 什么是面向对象&#xff1f;什么是面向过程&#xff1f; 面向过程 面向对象 比较 类 引入 定义 实例化 类的大小 this指针 前言 今天我们来进入C类和对象的学习。相信大家一定听说过C语言是面向过程的语言&#xff0c;而C是面向对象的语言&#xff1f;那么他…