1

我正在尝试bat-hosts.cBatctl 2011.2.0编译。但是,这是 CLANG 3.1 编译器从 Android NDK rev 发出的错误消息。8c:

bat-hosts.c:41:1:错误:函数声明器中的存储类说明符无效

我在同一个 NDK rev 中从 GCC 4.6 收到类似的错误消息。

第 41 行内容如下:

static struct hashtable_t *host_hash = NULL;

这个指向结构的指针hashtable_t(在 中定义hash.h)在任何函数之外被声明为静态,并在声明时指向NULL,我认为这是有效的。

std我尝试在选项设置为gnu11c11gnu1xc1x和的情况下运行 GCC/CLANG c99

我的问题是:

为什么编译器将此指针标识为函数声明?

提前致谢

编辑: 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,如果您愿意,您可以发布回复,我会将其标记为答案。

4

1 回答 1

1

按照要求:

hashdata_compare_db和的 typedef 是什么hashdata_choose_cb?那里有存储类吗?基本上,您应该向我们展示重现问题的 SSCCE(简短、独立、正确的示例)。应包括所有(但仅)必要的标题。尽可能只使用标准标题。

通常,创建 SSCCE 的过程无论如何都会帮助您解决问题。

而且,事实上,创建 SSCCE 似乎至少让您对您的问题有了新的认识。

祝你好运追踪问题的其余部分。

于 2012-11-15T08:48:26.577 回答