是否需要局部变量?

Are local variables necessary?

我的理解是 C 调用约定在调用函数之前将参数放在堆栈上。可以使用 EBP 作为引用(例如 [EBP + 8][EBP + 12])通过显式堆栈参数在函数内访问这些参数。

我的问题是如果可以这样访问,为什么需要局部变量? - 函数不能直接使用参数吗?是否只是针对函数没有参数,但仍然初始化局部变量供内部使用的情况?

很多时候,函数需要记住比参数更多的数据。例如,考虑这个函数计算其参数中设置位的数量:

int popcount(int k)
{
    int count = 0;

    while (k != 0) {
        k &= k - 1;
        count++;
    }

    return (count);
}

除了参数,我们还需要记住我们看到了多少位。因此,需要一个局部变量。