为什么比较空函数指针导致“无效的操作数到二进制==”

时间:2012-10-13 01:17:08

标签: c

有人可以向我解释为什么下面的代码得到“无效操作数到二进制==”错误?

typedef int (*func_t)(int);
#define NO_FUNC ((func_t) 0)
struct {
    const char *name;
    func_t func;
} table[] = { {"func1", NO_FUNC} };

if (table[0] == NO_FUNC) { // invalid operands to binary ==

}

2 个答案:

答案 0 :(得分:3)

你应该在结构中引用正确的成员:

if (table[0].func == NO_FUNC)

答案 1 :(得分:2)

table[0]属于未命名的struct类型,NO_FUNC的类型为int (*)(int)。这两种类型无法比较。

相反,您可以使用:

if (table[0].func == NO_FUNC)