C 语言反向遍历的正确姿势

Iterating Backwards in C

在 LLM 时代,很多人依然习惯用错误的方式在 C 语言中反向遍历数组。常见的误区是直接使用 i >= 0 作为循环条件,这在 size_t 类型下会导致逻辑错误,甚至让编译器发出警告。改用有符号类型 ssize_t 虽然能跑通,却引入了类型转换、跨平台兼容性以及整数提升等隐患。其实,C 语言中反向遍历有一个更优雅、更安全的写法:利用后置递减运算符 i-- 的特性,直接写成 for(size_t i = count; i--; )。这种方式不仅代码简洁,还能利用无符号整数溢出的定义行为避免边界问题,无需任何额外的类型转换或特殊检查。

你可以一眼看出某人是否正确实现了反向循环。
  1. kenferry

    我知道这有点“过于聪明”,但如果我写的代码没人会看,

    while (i --> 0) {

    // 使用 array[i]

    }

    既容易阅读(虽然未必容易理解),又完全正确!

  2. MaulingMonkey

    我更喜欢这样写:

    const size_t n = 10;

    for (size_t i = n; i --> 0;) {

    std::cout << i << "\n";

    }

  3. abstractspoon

    我用这个方法已经超过 30 年了!

同日更多故事

2026-10-30