- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
内核编码风格和 gnome 的 C 风格指南都指出:
Do not unnecessarily use braces where a single statement will do.
if (condition)
action();
else
分支:
if (condition) {
do_this();
do_that();
} else {
otherwise();
}
最佳答案
只有风格和易于编辑相关的原因。
无论是否省略大括号,C 编译器都必须像有大括号一样(+ 一对围绕整个迭代语句( if
或 if
- else
))。
6.8.4p3 :
A selection statement is a block whose scope is a strict subset of thescope of its enclosing block. Each associated substatement is also ablock whose scope is a strict subset of the scope of the selectionstatement.
#include <stdio.h>
int main()
{
enum{ e=0};
printf("%d\n", (int)e);
if(1) printf("%d\n", (sizeof(enum{e=1}),(int)e));
if(sizeof(enum{e=2})) printf("%d\n", (int)e);
printf("%d\n", (int)e);
//prints 0 1 2 0
}
迭代语句也存在类似的规则:
6.8.5p5 .
goto
之间而不是简单地使用
while
语句,这将限制文字的范围,无论是否使用显式大括号。
if (Ptr) Ptr = &(type){0}; //WRONG way to provide a default for Ptr
由于范围规则,上述导致 UB(实际上是不工作的智慧
gcc -O3
)。
type default_val = {0};
if (Ptr) Ptr = &default_val; //OK
或与:
Ptr = Ptr ? Ptr : &(type){0}; //OK
这些隐式块在 C99 中是新的,并且内部块(用于选择语句 (=ifs))被很好地合理化(
C99RationaleV5.10.pdf,第 6.8 节)作为重构的辅助工具,防止从先前未加括号的分支中添加的花括号改变含义。
for
-loop-local 变量在整个 for 循环的最后被销毁(就像 for 循环被加括号一样)。
?:
但不是带有
if
的宏,这很奇怪。)
关于c - 即使在不必要的情况下,是否也有反对使用大括号的客观理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60779179/
jQuery attributeContainsPrefix [name^="value"] 对比 attributeStartsWith [name|="value"] 实际区别是什么? 最佳答案
在1.1部分在RFC 6749中,有四种角色:资源拥有者、资源服务器、客户端和授权服务器。 如果客户端和资源所有者是同一实体,OAuth 是否变得多余或不必要? 例如,我有一个封闭的 API 和一个面
我有一段代码,其中有一个带有保护子句的 raise 语句: def validate_index index # Change to SizeError raise ArgumentError
我看到了这篇文章( JPA Entity Lifecycle Events vs database trigger ),但它并没有像我在这里那样明确地询问: 当我插入 PK 值为 (null) 的行时
所以,我有一段代码看起来像 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ // Do something }
我是一名优秀的程序员,十分优秀!