나는 교육 목적으로 C로 해시 테이블을 구현하려고합니다.크기 size_t preprocessor 값
해시 함수는 size_t 해시를 반환해야합니다. size_t의 크기가 플랫폼마다 다르므로 size_t의 모든 비트를 해쉬하는 해시 함수를 사용하고 싶습니다. 다른 크기의 해시 함수를 여러 개 만들려고했습니다. 간접
size_t hash4(void* key, size_t size);
size_t hash8(void* key, size_t size);
size_t hash(void* key, size_t size)
{
if (sizeof(size_t) == 4)
{
return hash4(key, size);
}
else if (sizeof(size_t) == 8)
{
return hash8(ket, size);
}
}
size_t (*hashFunc)(void* key, size_t size) = hash;
그리고이 수준이 해시 함수가 호출 될 때마다 사용됩니다 해쉬 함수는 함수 포인터로 사용됩니다, 나는 컴파일러는이 같은하지 인라인 코드 수 있습니다 생각한다.
그런 이유로 나는 이런 식으로 생각했다 : size_t (*hashFunc)(void* key, size_t size) = hash##sizeof(size_t);
. 간접 지정은 한 단계 만 사용됩니다. 문제는 prepossessing 단계에서 sizeof 연산자를 사용할 수 없다는 것입니다.
그렇다면 각 플랫폼에서 size_t의 올바른 크기로 확장되는 선처리 프로세서 값을 정의하는 좋은 방법은 무엇입니까? 사전 정의 된 매크로를 검사 할 수 있다고 생각합니다. 그러나 더 좋은 방법이 있는지 궁금합니다.
분명히, 구조체 내부에서 상수 함수 포인터를 초기화하는 데 사용할 수 있으므로 실제로이 포인터를 선호한다고 생각합니다. –