В настоящее время я работаю над проектом кода, который требует, чтобы я заменил определенные строки хэшами этих строк.Учитывая, что эти строки не изменятся во время выполнения, было бы целесообразно с точки зрения эффективности, чтобы препроцессор 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;
Я написал генератор файлов заголовков, и он отлично работает для этого проекта.
Окончательное решение
Я решилиспользуйте скрипт perl Джона Пурди для этого проекта, так как он просто великолепен и позволяет мне передавать желаемый результат прямо в мой компилятор.Большое спасибо, Джон.