我试图从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选项设置为gnu11c11gnu1xc1xc99的情况下运行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_dbhashdata_choose_cb的typedef是什么?那里有存储类吗?基本上,你应该给我们看一个重现问题的SSCCE(Short, Self-Contained, Correct Example)。应包括所有(但仅限于)必需的标题。尽可能只使用标准头。
通常,创建SSCCE的过程会帮助您解决问题。
而且,事实上,创建一个SSCCE似乎至少给了你一个新的视角来看待你的问题。
祝你好运,能找到剩下的问题。

10-08 16:36