我的问题是关于我在主题中提到的行,我可以在生产代码的许多地方看到它.

总体代码如下所示:

if (0) {
    // Empty braces
} else if (some_fn_call()) {
    // actual code
} else if (some_other_fn_call()) {
    // another actual code
    ...
} else {
    // default case
}

其他分支与我的问题无关.我想知道在这里放if (0)是什么意思.大括号是空的,所以我不认为它应该注释某些代码块.它是迫使编译器进行一些优化,还是它的意图不同?

我曾试图在某某和互联网上搜索这个明确的 case ,但没有成功.关于JavaScript也有类似的问题,但不是C.还有一个问题,What happens when a zero is assigned in an `if` condition?,但它讨论了变量的零赋值,而不是"if(0)"用法本身.

推荐答案

有时我会用它来对称,这样我就可以和我的编辑一起自由地移动剩下的else if{个,而不必介意前if个.

语义上

if (0) {
    // Empty braces
} else 

部件不起任何作用,您可以指望优化器将其删除.

C++相关问答推荐

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

ZED for SDL上的C语言服务器

变量>;-1如何在C中准确求值?

将 struct 变量赋给自身(通过指针取消引用)是否定义了行为?

文件权限为0666,但即使以超级用户身份也无法打开

Cairo STM32MP1 cairo_Surface_WRITE_TO_PNG始终返回CAROLIO_STATUS_WRITE_ERROR

C堆栈(使用动态数组)realloc内存泄漏问题

C将数组传递给函数以修改数组

仅从限制指针参数声明推断非混叠

为什么这个分配做得不好呢?

OSDev--双缓冲重启系统

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

赋值两侧的后置增量,字符指针

`%%的sscanf无法按预期工作

令人困惑的返回和 scanf 问题相关

尽管将其标记为易失性,但 gcc 是否优化了我的等待代码?

使用 GCC 将一个函数中初始化的 struct 体实例通过指针传递到 C 中的另一个函数会产生不同的结果

(GNU+Linux) 多个线程同时调用malloc()

GDB 用内容初始化数组

如何使 clangd 启用仅标头库实现