Hash 预处理器初始化哈希变量

Hash 预处理器初始化哈希变量,hash,macros,c-preprocessor,Hash,Macros,C Preprocessor,我发现了关于创建uint32大小的字符串哈希的描述: 我想用这个宏初始化一个全局变量。我不想在已编译的二进制文件中添加字符串,只想添加哈希 但是当使用这个宏时,我得到一个错误:error:Initializer元素不是常量 对于C&GCC编译器,是否有解决方法 在C中,静态初始值设定项必须是常量表达式,而C对常量表达式的定义非常挑剔: 算术常数表达式应具有算术类型,且只能具有整数常量、浮点常量、枚举常量、字符常量、结果为整数常量的表达式和表达式的操作数。(§6.6/8) 请注意,字符串文字不在

我发现了关于创建uint32大小的字符串哈希的描述:

我想用这个宏初始化一个全局变量。我不想在已编译的二进制文件中添加字符串,只想添加哈希

但是当使用这个宏时,我得到一个错误:
error:Initializer元素不是常量

对于C&GCC编译器,是否有解决方法


在C中,静态初始值设定项必须是常量表达式,而C对常量表达式的定义非常挑剔:

算术常数表达式应具有算术类型,且只能具有整数常量、浮点常量、枚举常量、字符常量、结果为整数常量的表达式和表达式的操作数。(§6.6/8)

请注意,字符串文字不在有效操作数列表中,因此
“字符串”[2]
不符合条件

C++不要求静态初始值设定项是常量表达式,而且它对常量表达式的接受程度也更高。(例如,<代码>静态const int /COD>变量可以在C++中使用,但在C.中不适用)

因此,C预处理器无法帮助您构造一个初始化为从字符串计算的哈希的静态声明。如果您真的想这样做,最好的办法可能是自己对源文件进行预处理,使用一个实用程序来识别对
哈希的调用,并将它们替换为作为整数常量的计算哈希