我几天前用gperf生成了一个哈希函数.我看到的哈希函数对我来说是陌生的.它是这样的(我不记得确切的语法):
unsigned int hash(str,size) register char* str; register unsigned int size; { //Definition }
现在,当我尝试使用C编译器(g)进行编译时,由于没有声明str和size,它向我抛出了错误.但这是在C编译器(gcc)上编译的.所以,问题:
>我认为C是C的超集.如果是这样的话,这应该用C编译器编译吧?
> C编译器如何理解定义? str和size在首次出现时未声明.
>在函数签名之后但在函数体之前声明str和size的目的是什么,而不是遵循在两个地方中的任何一个中执行它的正常方法?
>我如何让这个函数在g上编译,所以我可以在我的C代码中使用它?或者我应该尝试从gperf生成C代码?那可能吗?
解决方法
1. C不是超集,虽然这也不是标准C.
2/3.这是K& R函数声明.见What are the major differences between ANSI C and K&R C?
.
4.实际上,gperf确实有一个选项-L来指定语言.你可以使用-L C来使用C.