我正在尝试从Batctl 2011.2.0汇编bat-hosts.c
。但是,这是来自Android NDK rev的CLANG 3.1编译器发出的错误消息。图8c:
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。< / p>
我的问题是:
为什么编译器将此指针标识为函数声明?
提前致谢
编辑:
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如果您愿意,可以发布回复,我会将其标记为答案。
答案 0 :(得分:1)
根据要求:
hashdata_compare_db
和hashdata_choose_cb
的typedef是什么?那里有存储类吗?基本上,您应该向我们展示一个再现问题的SSCCE(Short, Self-Contained, Correct Example)。应包括所有(但仅限于)必要的标题。它应尽可能只使用标准标题。通常,创建SSCCE的过程无论如何都会帮助您解决问题。
事实上,创建一个SSCCE似乎至少让你对你的问题有了新的看法。
跟踪问题的其余部分,祝你好运。