Namespaces
Variants

if statement

From cppreference.net

有条件地执行代码。

在需要仅当某个条件为真时才执行代码时使用。

目录

语法

attr-spec-seq  (可选) if ( expression ) statement-true (1)
attr-spec-seq  (可选) if ( expression ) statement-true else statement-false (2)
attr-spec-seq - (C23) 可选的 属性 列表,应用于 if 语句
expression - 任意标量类型的 表达式
statement-true - 任意 语句 (通常为复合语句),当 expression 比较结果不等于 0 时执行
statement-false - 任意 语句 (通常为复合语句),当 expression 比较结果等于 0 时执行

说明

expression 必须是任意 标量类型 的表达式。

如果 expression 比较结果不等于整数零,则执行 statement-true

在形式 (2) 中,若 expression 与整数零比较相等,则执行 statement-false

与所有其他选择语句和迭代语句一样,整个if语句拥有其自身的块作用域:

enum {a, b};
int different(void)
{
    if (sizeof(enum {b, a}) != sizeof(int))
        return a; // a == 1
    return b; // b == 0 in C89, b == 1 in C99
}
(since C99)

注释

else 始终与最近的前一个 if 相关联(换言之,如果 statement-true 同样是一个 if 语句,那么该内部 if 语句也必须包含 else 部分):

int j = 1;
if (i > 1)
    if(j > 2)
        printf("%d > 1 and %d > 2\n", i, j);
    else // 这个 else 属于 if (j > 2) 分支,而非 if (i > 1) 分支
        printf("%d > 1 and %d <= 2\n", i, j);

如果通过 goto 进入 statement-true ,则不会执行 statement-false

关键词

if , else

示例

#include <stdio.h>
int main(void)
{
    int i = 2;
    if (i > 2)
    {
        printf("i > 2 is true\n");
    }
    else
    {
        printf("i > 2 is false\n");
    }
    i = 3;
    if (i == 3)
        printf("i == 3\n");
    if (i != 3)
        printf("i != 3 is true\n");
    else
        printf("i != 3 is false\n");
}

输出:

i > 2 is false
i == 3
i != 3 is false

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 6.8.5.2 if 语句 (p: 154)
  • C17 标准 (ISO/IEC 9899:2018):
  • 6.8.4.1 if 语句 (p: 108-109)
  • C11 标准 (ISO/IEC 9899:2011):
  • 6.8.4.1 if 语句 (p: 148-149)
  • C99标准(ISO/IEC 9899:1999):
  • 6.8.4.1 if语句(页码:133-134)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 3.6.4.1 if 语句

参见

C++ 文档 关于 if 语句