使用函数指针

时间:2013-10-05 18:55:12

标签: c pointers function-pointers

我在C中有一个崩溃我的代码的功能,我很难弄清楚发生了什么。我有一个看起来像这样的函数:

#define cond int
void Enqueue(cond (*cond_func)());

cond read() {
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}

Enqueue(&read);

然而,在运行上述内容时,只要调用Enqueue就会发生段错误。它甚至不执行函数内部的任何内容。我运行了gdb,它只是在Enqueue被调用时显示它正在死亡 - 它内部没有处理任何语句。知道发生了什么事吗?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

#define cond int

原意是:

typedef int cond;

虽然为函数指针定义别名可能在这里更合理,例如:

typedef int (*FncPtr)(void);

int read() {
    printf("reading...");
}

void foo(FncPtr f) {
    (*f)();
}

int main() {
    foo(read);
    return 0;
}

答案 1 :(得分:0)

您能否提供有关代码的更多信息,因为根据我的解释,代码工作正常。我试过这个 -

#define cond int
void Enqueue(cond (*cond_func)());
cond read() 
{
int some_global=1;
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}

int IsEmpty()
{
return 1;
}

void Enqueue(cond (*cond_func)())
{
printf("Perfect");
return 0;
}

int main()
{
Enqueue(&read);
return 0;
}

它工作正常。

答案 2 :(得分:0)

这很好用:

#include <stdio.h>
#include <stdbool.h>

typedef bool cond;

void Enqueue(cond (*cond_func)(void)) {
    printf("In Enqueue()...\n");
    cond status = cond_func();
    printf("In Enqueue, 'status' is %s\n", status ? "true" : "false");
}

bool IsEmpty(const int n) {
    return true;
}

cond my_cond_func(void) {
    printf("In my_cond_func()...\n");
    return IsEmpty(1);
}

int main(void) {
    Enqueue(my_cond_func);
    return 0;
}

您的问题可能来自其他地方,例如您未提供的Enqueue()的定义,或您的函数被称为read()的事实,并且与更常见的函数冲突那个名字。