我目前正在研究一個代碼項目,要求我用這些字符串的散列替換某些字符串。由於這些字符串在運行時不會改變,因此讓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