惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

文章列表

不改一行插件代码,实现消息优先级与阻断 洛玖定时任务系统 在 butterfly 主题中添加首页点集动画(基于p2line项目) 你好,2026 stm32f4xx-ads1256驱动 stm32f4xx-ad9854并行驱动 主动式网站状态监测实现及其应用 右键菜单加入用Trae打开文件和文件夹 三角洲行动ID映射表 洛玖SDK说明 为网页文章开头添加原文连接 Hexo-Butterfly主题在主页添加GitHub贡献日历 Proteus中555定时器仿真问题 装饰器 洛玖开发日记 STS3032舵机获取力矩输出 kotlin网页前后端那些事 mspm0g3507-ad9850 奇怪的bug Paddle模型转PaddleLite 人工智能考核 构建一个yolov3网络 yolo和paddle模型常见输出参数 PaddleDetection 随便写的一些东西 实验室C语言第一次考核题目讲解及相关代码解读 C语言神经网络房价预测系统 C、C++数组,指针,指针数组,数组指针的区别 C、C++预处理详解 C、C++其他关键字详解 C、C++存储类型关键字详解 C、C++控制语句关键字详解
C、C++的大括号是必须的部分吗?
洛屿 · 2023-10-10 · via

在作为一名初学者,你可能看到一些课程中,对于判断或者循环部分,会使用类似这样的两种方式:

1
2
3
4
5
6
7
8
9
10
11
12
// 方式1
if(a > 1){
printf("a > 1");
}
for (int i = 0; i< 10; i++) {
printf("%d\n", i);
}
// 方式2
if(a > 1)
printf("a > 1");
for (int i = 0; i< 10; i++)
printf("%d\n", i);

并且你会发现,对于这两种方式,他们的效果一样。

那么大括号{}括起来和不括起来有什么区别呢?


在C语言中,if语句后面的圆括号()内的表达式决定了条件是否为真。

当条件为真时,if语句后面的代码块将被执行。

这个代码块可以是单个语句,也可以是用大括号{}括起来的多个语句

下面我来解释两种写法的差异:

1
2
3
  if(a > 1) { 
printf("条件为真时执行的代码");
}

这种写法使用了大括号{},将一组语句组成了一个代码块。如果条件a > 1为真,那么大括号内的所有语句都将被执行。

1
2
if(a > 1) 
printf("条件为真时执行的代码");

这种写法没有使用大括号{},只包含了一个单独的语句。如果条件a > 1为真,那么仅仅执行紧随其后的这个语句。

所以,对于这种情况,两种写法的效果是一样的,只不过一种是用大括号明确地定义了一个代码块,另一种是单独的语句。

这种用大括号括起来的部分通常被称为代码块或语句块,它可以包含一个或多个语句,用于组织多条语句以在特定条件下执行。使用大括号可以增加代码的可读性,并避免潜在的歧义,特别是在多条语句的情况下。

不过在某些简单情况下,可以选择不使用大括号,但这通常不被推荐,因为它可能导致代码在以后的修改中出现问题。

如果在 if 语句中不使用大括号括起来代码块,你可能会遇到以下问题:

  1. 逻辑错误:最常见的问题是逻辑错误。如果你不小心缩进了代码,以使其看起来好像属于 if 语句,但实际上不是,这可能会导致代码不按预期运行。

  2. 可读性差:缺少大括号会使代码的结构不够清晰,降低了可读性。其他开发人员阅读代码时可能会难以理解哪些代码是条件成立时执行的。

  3. 维护问题:如果以后需要在条件成立时执行多个语句,你可能会忘记添加大括号,从而导致错误。这种错误很难发现,并且可能导致严重的问题。

例如,考虑以下代码:

1
2
3
if (x > 10)
printf("x 大于 10");
y = x * 2;

在这个示例中,printf 看起来好像是条件成立时执行的,但实际上,只有 printf 会受到 if 语句的条件影响。y = x * 2 不受条件控制,这可能不是你的意图。

为了避免这种潜在的问题,建议始终使用大括号来明确地定义代码块,即使在 if 语句中只有一个语句也是如此,这样可以提高代码的可读性和健壮性,降低出错的可能性。例如:

1
2
3
4
if (x > 10) {
printf("x 大于 10");
y = x * 2;
}

这种方式更清晰,更容易维护,且不容易出现潜在错误。