C 用于分配结构哈希键的全局变量的替代方法

C 用于分配结构哈希键的全局变量的替代方法,c,hash,struct,global-variables,C,Hash,Struct,Global Variables,如何实现一种方法,在不使用全局变量的情况下,提供唯一的int作为结构哈希表的哈希键 注意,可能有多个哈希表,但每个组成结构必须在所有哈希表中具有唯一的键,因为这些表可以合并在一起 也许我应该只使用一个全局变量,但在某些情况下,全局变量很有用 在这种情况下,如果您有多个线程,您可能希望使其成为静态的(代码文件受限),并通过执行正确的互斥锁的函数访问它。以下是我实现的: enum CTROP { RESET=0, INCREMENT=1 }; int counter(enum CTRO

如何实现一种方法,在不使用全局变量的情况下,提供唯一的int作为结构哈希表的哈希键

注意,可能有多个哈希表,但每个组成结构必须在所有哈希表中具有唯一的键,因为这些表可以合并在一起


也许我应该只使用一个全局变量,但在某些情况下,全局变量很有用


在这种情况下,如果您有多个线程,您可能希望使其成为静态的(代码文件受限),并通过执行正确的互斥锁的函数访问它。

以下是我实现的:

enum CTROP {
   RESET=0,
   INCREMENT=1
};

int counter(enum CTROP ctr_op)
{
    static int n;

    switch (ctr_op) {
    case RESET:
        n=0;
        break;
    case INCREMENT:
        n++;
        break;
    default:
        print_err_log(ERR_LOG, "invalid arg for counter()", __FILE__, __LINE__);
        return -1;
    }
    return n;
}

你可以使用一个
静态变量
是的,这是朝着正确的方向发展的-虽然仍然有点全局性-想知道是否有一些聪明的替代方案-比如闭包是理想的,但是它是C,所以不太直截了当,你的意思是使内部变量是静态的,而不是外部静态变量吗?如果它是
静态的
,那么它就不是一个真正的全局变量。它仅限于该模块。是的,在这种情况下,这不是问题,因此肯定比适当的全局变量要好。考虑到这一点,仍然感觉有点错误。限制任何静态(文件范围)外部变量的潜在影响是不将太多函数集中到同一个src文件中的一个很好的理由