我目前正在研究一个代码项目,要求我用这些字符串的散列替换某些字符串。由于这些字符串在运行时不会改变,因此让c预处理器对我声明在编译时被哈希的每个字符串运行我的哈希函数将是有利的,效率明智的。如何让C预处理器在编译期间执行代码?
有什么办法让编译时运行我的散列函数的预处理器?C?
我知道这并不是我上面描述的方式,但只是想知道我要去哪里,这里有一些使用宏的伪代码。试想一下,而不是简单地扩大宏,预处理器运行散列函数,并将其扩展到该散列函数的返回值:
#include <iostream>
#include <string>
#define U64_HASH(inputString) getU64HashCode(inputString)
//my hash function
unsigned long long getU64HashCode (string inputString)
{
/*code*/
}
int main()
{
cout << U64_HASH("thanks for helping me") << endl;
return 0;
}
再次,理想的cout << U64_HASH("thanks for helping me") << endl;
将扩大到cout << 12223622566970860302 << endl;
我写的一个头文件生成器,并且这个项目工作正常。
最终解决
我已经决定使用John Purdy's perl script这个项目,因为它只是真棒,并让我给我希望直接输出喂到我的编译器。非常感谢,约翰。
并非没有疯魔。 –
C++ 11具有用户定义的文字和constexpr。这些可能会有所帮助。 – Pubby
你总是可以将这些字符串定义为哈希值? AFAIK C预处理器没有任何运行代码的能力。 – Serdalis