Actualmente estoy trabajando en un proyecto de código que me obliga a reemplazar ciertas cadenas con hashes de esas cadenas. Viendo que estas cadenas no cambiarán en el tiempo de ejecución, sería ventajoso, en términos de eficiencia, tener el preprocesador c ejecutando mi función hash en cada cadena que declaro que es hash en el momento de la compilación.¿Cómo hacer que el preprocesador C ejecute el código durante la compilación?
¿Hay alguna forma de obtener el preprocesador C para ejecutar mi función hash en tiempo de compilación?
Sé que esto no funciona de la manera que describí anteriormente, pero solo para tener una idea de hacia dónde voy, aquí hay un pseudocódigo que usa una macro. Imagine que en lugar de simplemente la expansión de la macro, el preprocesador corrió la función hash y lo amplió para el valor de retorno de esa función hash:
#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;
}
Una vez más, idealmente el cout << U64_HASH("thanks for helping me") << endl;
se expandiría a cout << 12223622566970860302 << endl;
escribí un generador de archivos de cabecera, y eso funciona bien para este proyecto.
Solución Final
he decidido utilizar John Purdy's perl script para este proyecto, ya que es simplemente impresionante, y me permite alimentar la salida Quiero directamente a mi compilador. Muchas gracias, John.
No sin algo de magia loca. –
C++ 11 tiene literales definidos por el usuario y constexpr. Esos podrían ser útiles. – Pubby
siempre podría '# definir' esas cadenas como sus hashes? AFAIK el preprocesador C no tiene ninguna capacidad de ejecutar código. – Serdalis