我试图从Batctl 2011.2.0编译bat-hosts.c
。但是,这是Clang3.1编译器从Android NDK rev发出的错误消息。8摄氏度:
bat hosts.c:41:1:错误:函数声明符中的存储类说明符无效
在相同的NDK版本中,我从GCC 4.6得到了类似的错误消息。
第41行写着:
static struct hashtable_t *host_hash = NULL;
指向
hashtable_t
结构(在hash.h
中定义)的指针在任何函数外部声明为静态,并在声明时指向NULL
,我发现这是有效的。我试着在
std
选项设置为gnu11
、c11
、gnu1x
、c1x
和c99
的情况下运行GCC/CLANG。我的问题是:
为什么编译器将此指针标识为函数声明?
提前谢谢
编辑:
hashtable_t
结构定义:struct hashtable_t {
struct element_t **table; /* the hashtable itself, with the buckets */
int elements; /* number of elements registered */
int size; /* size of hashtable */
hashdata_compare_cb compare; /* callback to a compare function.
* should compare 2 element datas for their keys,
* return 0 if same and not 0 if not same */
hashdata_choose_cb choose; /* the hashfunction, should return an index based
* on the key in the data of the first argument
* and the size the second */
};
第二次编辑:
谢谢大家的帮助。在按照@JonathanLeffler的建议创建了一个SSCCE之后,我发现这个问题与一个额外的库有关,我忘记了我包括了这个库。抱歉,浪费您的时间:-/
@JonathanLeffler如果你想的话,你可以发一个回复,我会把它标记为回复。
最佳答案
按要求:hashdata_compare_db
和hashdata_choose_cb
的typedef是什么?那里有存储类吗?基本上,你应该给我们看一个重现问题的SSCCE(Short, Self-Contained, Correct Example)。应包括所有(但仅限于)必需的标题。尽可能只使用标准头。
通常,创建SSCCE的过程会帮助您解决问题。
而且,事实上,创建一个SSCCE似乎至少给了你一个新的视角来看待你的问题。
祝你好运,能找到剩下的问题。